1、Linux标准教程第8章第8章 shell编程基础shell是一个命令解释器,可以用来启动、停止、编写程序。它是Linux系统的重要组成部分。shell是操作系统最外面的一层,负责管理用户与操作系统之间的交互,例如等待用户输入,向操作系统解释用户的输入,以及处理各种操作系统的输出结果。Linux的图形化环境有很大改进,在X Window系统下,用户几乎可以完成所有的工作,只需打开shell提示来完成极少量的任务。然而,许多Linux功能在shell提示下要比在图形化用户界面GUI下完成得更快。用户可以花少量时间打开文件管理器,定位目录,然后从GUI中创建、删除或修改文件;而在shell提示下,
2、只需使用几个命令就可以完成这些工作。本章学习目标: 理解shell的概念 了解为什么使用shell 学会基本shell命令操作 掌握shell脚本的创建 掌握shell程序的语法结构 学会使用shell的基本语句 了解shell函数 掌握后台运行进程 掌握控制进程的命令8.1 shell简介我们或许听过这样的说法:命令行(the command line)早就已经过时了,不需要命令行了。有些人甚至觉得操作系统中应该没有这些命令。8.1.1 shell的背景8.1.2 shell的功能8.2 shell基本语法像高级程序设计语言一样,shell也提供说明和使用变量的功能。对shell来讲,所有变
3、量的取值都是一个字符串,shell程序采用$var的形式来引用名为var的变量的值。8.2.1 shell定义的环境变量8.2.2 用户定义的变量8.2.3 内部变量8.2.4 参数置换的变量8.2.5 位置参数8.3 shell程序基础什么是shell程序?简单地说,shell程序就是一个包含若干行shell或Linux命令的文件。像编写高级语言的程序一样,编写一个shell程序需要一个文本编辑器,如VI等。在文本编辑环境下,依据shell的语法规则,输入一些shell/Linux命令行,形成一个完整的程序文件。8.3.1 变量表达式字符串比较test命令含义test命令含义str1str2
4、当str1与str2相同时,返回真-n str当str的长度大于0时,返回真str1!str2当str1与str2不同时,返回真-z str当str的长度是0是,返回真str当str不时空字符时,返回真数字比较test表达式含义test表达式含义int1 eq int2当int1等于int2时,返回真int1 gt int2当int1大于int2时,返回真int1 ge int2当int1大于/等于int2时,返回真int1 ne int2当int1不等于int2时,返回真int1 le int2当int1小于/等于int2时,返回真文件操作符test表达式含义test表达式含义-d file
5、当file是一个目录时,返回真-s file当file文件长度大于0时,返回真-f file当file是一个普通文件时,返回真-w file当file是一个可写文件时,返回真-r file当file是一个可读文件时,返回真-x file当file是一个可执行文件时,返回真逻辑操作符test表达式含义!expr当expr的值是假时,返回真expr1 a expr2当expr1和expr2值同为真时,返回真expr1 o expr2当expr1和expr2的值至少有一个为真时,返回真8.3.2 shell中的符号通配符功能说明符号类型说明*当前目录下的所有文件的名称*Text当前目录下的所有文件名
6、中包含有Text的文件的名称ab-dm*当前目录下的所有以a、b、c、d、m开头的文件的名称ab-dm?当前目录下的所有以a、b、c、d、m开头且后面只跟有一个字符的文件的名称/usr/bin/?目录/usr/bin下的所有名称为两个字符的文件的名称shell运算符赋值运算符说明算术运算符说明关系运算符说明赋值操作-负号大于+=先加再赋值+加法=大于等于*=先乘再赋值*乘法大于+=先加再赋值+加法=大于等于*=先乘再赋值*乘法=小于等于/=先除再赋值/除法!=不等于%=取余再赋值%取余=等于+自增量1-自减量18.3.3 bash介绍特殊字符字符含义!显示该命令的历史记录编号#显示当前命令的命
7、令编号$显示$符号为提示符,如果用户是root的话,则显示#号显示反斜杠d显示当前日期h显示主机名n打印新行nnn显示nnn的八进制值s显示当前运行的shell的名字t显示当前时间u显示当前用户的用户名W显示当前工作目录的名字w显示当前工作目录的路径8.4 循环语句程序中使用的控制结构分3种:顺序结构、循环结构和选项结构。正确使用这些语句控制结构可以使复杂的操作变得简单明了,便于运行,也方便他人阅读。8.4.1 for语句8.4.2 while语句8.4.3 until语句8.4.4 select语句8.4.5 shift语句8.5 条件语句条件语句的执行方式与循环语句的执行方式不同。条件语句
8、是一种分支语句,例如当我们需要出门时,需要考虑天气状况,比如现在正在下雨,则需要带伞,而现在是晴天,则不需要带伞。在Linux种,当语句满足某些条件才可以继续进行某些操作,如果不满足,则不运行或跳过某些操作。另外,条件语句与循环语句之间的最大区别是条件语句没有循环功能。8.5.1 if语句if语句流程图8.5.2 case语句8.6 其他语句简介除了上述的几种语句外,shell还提供了几种辅助性的语句。这些语句不能单独应用,必须与固定的语句结合起来才能发挥作用。例如,在循环语句中使用break跳出循环嵌套等。本节主要介绍这些辅助语句的功能及使用方法。8.6.1 break 与contiune8
9、.6.2 exit语句8.7 函数shell允许将一组命令集或是一行语句形成一个可用块,这些块称为shell函数。函数是高级语言中的重要结构。shell中的函数与C或者其他语言中定义的函数一样,与从头开始,一行一行地写程序相比,使用函数主要好处是有利于组织整个程序。8.7.1 定义和使用函数8.7.2 向函数传递参数8.7.3 从调用函数中返回8.8 进程Linux是一个多用户多任务的操作系统。多用户是指多个用户可以在同一时间使用计算机系统;多任务是指Linux可以同时执行几个任务,可以在还未执行完一个任务时又执行另一项任务。8.8.1 进程管理及作业控制进程状态及其变化Linux进程状态的变
10、化进程的两种运行模式8.8.2 启动进程时间的合法范围时间合法值时间合法值minute0059month0112hour0023,00是指晚上12点week06,0是指周日day01318.8.3 查看进程8.8.4 进程调度8.8.5 调整优先级8.8.6 信号机制x86平台上Linux内核定义的常用信号信号号码符号表示含义1$IGHUP远程用户挂断2$IGINT输入中断信号(CtrlC)3$IGQUIT输入退出信号(Ctrl)4$IGILL非法指令5$IGTRAP退到调试断点6$IG10T10T指令7$IGBLIS总线超时8$IGFPE浮点异常9$IGKILL要求终止进程(不可屏蔽)10$IGUSR1用户自定义11$IGSEGV越界访问内存12$IGUSR2用户自定义13$IGPIPE普通文件只有写进程、没有读进程14$IGALRM定时报警信号15$IGTERM软件终止信号17$IGCHLD子进程终止19$IGSTOP进程暂停运行30$IGPWR电源故障8.9 思考与练习
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1