shell脚本的构建
在创建脚本文件时,必须在文件的第一行指定要使用的shell,格式为:
#!/bin/bash
脚本文件的第一行中#
后的惊叹号会告诉shell使用哪个shell来运行脚本,其他地方的#
作为注释行使用。
为了运行shell脚本需要让编写的脚本被shell识别到,一般的做法有两种:
- 将shell脚本文件所处的目录添加到
PATH
环境变量中; - 在提示符中用绝对路径或相对路径来引用shell脚本文件。
消息显示
在echo
命令后面加上一个字符串,就能显示出这个文本字符串。这种方式可以添加自己的文本消息来告诉脚本用户脚本正在做什么。
[zhaoej2014@admin ~]$ echo This is a test
This is a test
如果文本本身带有字符串,我们需要用单引号或双引号来划定文本字符串。
如果想把文本字符串和命令输出显示在同一行中,可以用echo
语句的-n
参数。需要在字符串的两侧加上引号,并且保证字符串尾部有一个空格
[zhaoej2014@admin zej]$ echo -n "The time and date are: "; date
The time and date are: Mon Nov 2 10:38:28 CST 2020
变量
变量允许我们临时性地将信息存储在shell脚本中,以便和脚本中的其他命令一起使用。
环境变量
shell维护着一组环境变量,用来记录特定的系统信息。比如系统的名称、登录到系统上的用户名、用户的系统ID(也称为UID)、用户默认主目录以及shell查找程序的搜索路径。
在环境变量名称之前加上$
可以使用这些环境变量。
用户变量
用户变量指的是用户自定义的变量,一般通过=
建立,如:var1=5
。注意,在变量、等号和值之间不能出现空格!
命令替换
shell脚本最有用的特性之一就是可以从命令输出中提取信息,并将其赋给变量。
有两种方法可以将命令输出赋给变量:
- 反引号字符(`)
- $()格式
要么用一对反引号把整个命令行命令围起来:
testing=`date`
要么使用$()格式
testing=$(date)
重定向
输出重定向
使用>
符号将命令的输出结果定向。如果想要将命令的输出追加到已有文件中,需要用双大于号(>>
)来追加数据。
输入重定向
输入重定向和输出重定向正好相反。输入重定向将文件的内容重定向到命令,而非将命令的输出重定向到文件。
使用>
进行输入的重定向
管道
有时候需要将一个命令的输出作为另一个命令的输入。通过|
符号分隔命令即可实现管道。
ls | head -2 | sort -r
执行数学运算
expr
命令
expr
命令允许在命令行上处理数学表达式
expr 1 + 5
使用方括号
bash shell提供了一种更简单的方法来执行数学表达式。在bash中,在将一个数学运算结果赋给某个变量时,可以用美元符和方括号($[operator])将数学表达式围起来。
[zhaoej2014@admin zej]$ var1=$[1+5]
[zhaoej2014@admin zej]$ echo $var1
6
注意:bash shell只支持整数运算。对于浮点数可以使用内置的计算器进行运算,命令为
bc
退出脚本
Linux提供了一个专门的变量$?
来保存上个已执行命令的退出状态码。按照惯例,一个成功结束的命令的退出状态码是0。如果有错误,则显示一个正数值。
默认,shell脚本会以脚本最后的一个命令的退出状态码退出。但是exit
命令允许在脚本结束时指定一个状态退出码。