(十三) Shell脚本基础
在shell命令行界面可以同时执行多个命令,命令之间用***分号隔开***
创建Shell脚本
在Shell脚本中以“#”开头的行表示注释行,但是第一行例外
#!/bin/bash
'#'号后面的!告诉Shell是用哪个Shell来运行脚本;
当我们编写号脚本文件是,执行该脚本文件,面临的一个问题:
让Shell找到你的脚本文件
有两种方式:
- 将脚本文件所在目录添加到PATH环境目录中
- 用绝对路径、相对路径来引用脚本文件
在脚本文件中使用变量
环境变量
在脚本文件中的环境变量前添加$符号来使用环境变量;
但是有时候我们要显示的就是$这个符号,而不是环境变量,比如:向控制台输出花了是$15;
echo "花了$15"
可能输出的结果就不是我们希望看见的,这时要显示 符 号 , 在 符号,在 符号,在前添加反斜杠“\”
用户变量
自己定义的变量,区分大小写;变量名由字母、数字、下划线组成
变量的生命周期:直到脚本结束,这些变量才会被删除;
在脚本中引用变量:也是通过$符号引用
#!/bin/bash
day=10
echo "已经$day天了"
变量赋值:
day=10
age=$day
命令替换
所谓命令替换就是:将命令输出信息,赋值给变量;
有两种方法将命令输出赋值给变量:
- 反引号字符(`)
- $(命令)格式
如:
test=`date`
test=$(date)
注意:赋值等号和命令替换符之间没有空格
重定向
重定向可以用于输出,也可以用于输入;
输出重定向 (>)####
比如前面我们说的将命令输出重定向到文件;
如:
date > test.txt
date命令的输出结果会覆盖原有的test文件内容(如果该文件之前已经存在)
输入重定向(<)
将文件的内容重定向到命令,而非将命令的输出重定向到文件;
格式:
command < 输入文件
还有一种输入重定向:内联输入重定向(<<)
无须使用文件进行重定向,只需在在命令行中指定输入重定向的数据就可以了;
你必须指定文本标记来划分输入数据的结束与开始;
文本标记:可以是任意字符串,但在数据的开始与结束文本标记必须一致;
如:
执行数学运算 expr命令
格式:
expr a expr操作符 b
如:
expr 5 \* 3
Bash shell还提供了一种更简单的方式来执行数学表达式:将一个数学运算结果赋值给某个变量时,可以用$和[]符号将数学表达式围起来;
如:
var=$[5-2]
不但适用于shell命令行,也适用用于shell脚本;这种方式就不会担心如前面的*转义问题,因为在[]中能自动识别区分其含义;
bash shell数学运算符只支持整数运算;
解决bash数学运算的整数限制方案:
- bc计算器,允许在命令行中输出浮点表达式
bc计算器能够识别:
- 数字(整数、浮点数)
- 变量(简单变量、数组)
- 注释(以#或者C语言中的/* */开始的行)
- 表达式
- 编程语句
- 函数
退出bc计算器:输入quit
浮点数运算精度有scale变量控制,默认scale为0;可以通过为scale变量赋值,改变运算精度;
在脚本中使用bc ,基本语法格式:
变量=$(echo "options ;表达式" |bc)
options:定义变量,如果定义多个用;隔开如:scale=4
如:
test=$(echo "scale=4;5.0/2" |bc);
退出脚本
前面我们说当执行完脚本文件的最后一条命令,脚本就结束了;其实还有另外一种方法结束脚本:
shell中运行的每条命令都使用***退出状态码***告诉shell它已经运行完毕;退出状态码是0~255的整数值,该值有命令结束时有命令传给shell,在脚本中可以捕获这个值;
Linux提供了一个专门的变量***$?***来保存上一执行命令的退出状态码;如果要查看某条命令的退出状态执行码,必须在其执行完毕立刻查看;
如:
一般,当一个命令正常结束,退出状态码为0;一个命令结束时有错误,退出状态码为一个正数;
exit命令
默认情况下,shell脚本会以脚本中最后一个命令的退出状态码退出;
exit命令允许你在脚本结束时指定一个状态退码;
格式:
exit 指定的状态退出码(可以引用脚本中的变量)
当指定的状态退出码值大于255时,返回的是该值与256的模;
09)]
exit命令
默认情况下,shell脚本会以脚本中最后一个命令的退出状态码退出;
[外链图片转存中…(img-KQ3Rt83G-1592379425310)]
exit命令允许你在脚本结束时指定一个状态退码;
格式:
exit 指定的状态退出码(可以引用脚本中的变量)
当指定的状态退出码值大于255时,返回的是该值与256的模;