2.1.5 Shell脚本
2.1.5.1 Shell脚本简介
Shell脚本是指将各类命令预先放在一个文件中,方便一次性执行的程序文件,使用了Linux、UNIX中的命令。Shell提供了数组、循环、条件和逻辑判断等重要功能,使用者可以直接以Shell来写程序,而不必使用类似C语言等传统程序语言的语法。
Shell是一个命令行解释器,按照一定的语法将输入的命令加以解释并传给系统,为用户提供了一个向Linux发送请求以便运行程序的接口系统级程序,用户可以用Shell来启动、挂起、停止,甚至编写一些程序。
Shell既是一种命令语言,又是一种程序设计语言。作为程序设计语言,Shell定义了各种变量和参数,并提供了许多在高级语言中才具有的控制结构,如循环结构和分支结构。作为命令语言,虽然Shell不是Linux系统内核的一部分,但它调用了系统内核的大部分功能来执行程序、创建文档,并以并行的方式协调各个程序的运行。
2.1.5.2 创建Shell脚本
打开文本编辑器,新建一个文本文件并命名为test.sh。在test.sh中输入以下代码:
第1行的“#!”是一个约定的标记,告诉系统这个脚本需要什么解释器来执行,即使用哪一种Shell;后面的“/bin/bash”指明解释器的位置。
第2行的echo命令用于向标准输出设备(如显示器)输出数据。在.sh文件中使用命令与在终端直接输入命令的效果是一样的。第2行的“#”及其后面的内容是注释。Shell脚本示例如下:
上述Shell脚本示例的第4行表示从终端读取用户输入的数据,并赋值给PERSON变量。read命令用来从标准输入设备(鼠标、键盘)中读取数据;第5行表示输出PERSON变量的内容,注意在变量名前边要加上“$”,否则会将变量名当成字符串来处理。
2.1.5.3 Shell变量
1)系统变量
Shell的系统变量主要在判断参数和命令返回值时使用,包括脚本和函数的参数,以及脚本和函数的返回值。Shell的系统变量如表2.10所示。
表2.10 Shell的系统变量
2)环境变量
Shell的环境变量是所有Shell程序都可以使用的变量,会影响所有脚本的执行结果。Shell的环境变量如表2.11所示。
表2.11 Shell的环境变量
3)设置变量
变量的设置规则如下:
(1)变量名称可以由字母、数字或下画线组成,但不能以数字开头,环境变量名建议大写,便于区分。
(2)变量的默认类型都是字符串型,如果要进行数值运算,则必须指定变量类型为数值型。
(3)变量用等号连接值,等号左右两侧不能有空格。
(4)如果变量的值有空格,则需要使用单引号或者双引号包括。
4)定义变量
Shell支持3种定义变量的方式,例如:
输出为:
variable是变量名,Stone是赋给变量的值。如果赋给变量的值中不包含空白符,则可以不使用引号;如果赋给变量的值中包含空白符,则必须使用引号包围起来。单引号和双引号是有区别的,当使用单引号包围变量时,单引号里面是什么就输出什么,这种方式适合纯字符串的情况,即不希望解析变量、命令等;当使用双引号包围变量时,输出时会先解析里面的变量和命令,这种方式适合字符串中附带有变量和命令,并且希望解析其中的变量和定义后再输出的变量定义。
5)使用变量
使用一个定义过的变量,只需要在变量名前面加符号“$”即可,例如:
运行结果为:
变量名外面的花括号是可选的,加花括号可以帮助解释器识别变量的边界。
6)修改变量的值
已定义的变量可以重新被赋值,例如:
运行结果为:
7)删除变量
使用unset命令可以删除变量,例如:
变量被删除后不能再次使用;unset命令不能删除只读变量。
2.1.5.4 Shell的流程控制
(1)if语句。if语句的格式为:
举例如下:
输出结果为:
(2)for语句。for语句的格式为:
例如:
输出结果为:
(3)while语句。while语句的格式为:
例如:
输出结果为:
(4)case语句。case语句的格式为:
例如:
输入5,输出结果为:
2.1.5.5 Shell脚本的执行
运行Shell脚本的方法有两种:一种是在新进程中运行Shell脚本;另一种是在当前的进程中运行Shell脚本。
(1)在新进程中运行Shell脚本。
①将Shell脚本作为程序运行。Shell脚本也是一种解释执行的程序,可以在终端直接调用,如下所示:
在上述代码中,第2行中的“chmod+x”表示给test.sh增加执行权限;第3行用来执行当前目录下的test.sh。
②将Shell脚本作为参数传递给Bash解释器。将脚本文件的名字作为参数传递给Bash,例如:
通过这种方式运行脚本,不需要在脚本文件的第一行指定解释器信息。
③更加简洁的方法是运行bash命令。bash是一个外部命令,Shell会在“/bin”目录中找到对应的应用程序,即“/bin/bash”。修改如下:
(2)在当前进程中运行Shell脚本。需要用到source命令,source命令会读取脚本文件中的代码,并依次执行所有语句。source命令的用法如下:
例如,使用source命令运行test.sh,代码如下: