内容纲要
多个命令一起运行,用分号隔离,长度不超过255;
井号(#)用过注释行,但第一行是个例外,#后面的惊叹号(!)会告诉shell用哪个shell来运行脚本;
显示消息echo(注意:sh内置的echo禁用选项)
默认情况下,要输出的字符串直接放到命令后面;
字符串内有单引号或双引号一种,用两一种划定起来;
把文本字符串和命令输出显示在同一行中用-n选项;
-e选项启用反斜杠转义的解释,-E相反也是默认;
环境变量:
set命令显示当前环境变量列表;
可前加美元符号($)或${环境变量}来使用环境变量,要显示$用反斜线();
注意:
[root@localhost code]# echo "the cost of the item is $15"
the cost of the item is 5
脚本将$15中的$1当做一个变量尝试去显示(但并未定义),再显示数字5
用户变量:
用户变量可以是任何由字母,数字或下划线组成的文本字符串,长度不超过20个,区分大小写 ,区分大小写;
使用等号将值赋给变量,在变量,等号和值之间不能出现空格;
* 与环境变量一样,用户变量通过美元符号($)引用;
命令替换:
反引号字符(`)或$(),用它们可以从命令输出中提取信息,并赋给变量;
#!/bin/bash
today=$(date +%Y%m%d)
echo $today.log
结果:20200226.log
可用于脚本中日志文件命名方法
命令替换会创建一个子shell来运行对应的命令。子shell( subshell)是由运行该脚本的shell 所创建出来的一个独立的子shell(child shell) 。正因如此,由该子shell所执行命令是无法 使用脚本中所创建的变量的。 在命令行提示符下使用路径 ./ 运行命令的话,也会创建出子shell;要是运行命令的时候 不加入路径,就不会创建子shell。如果你使用的是内建的shell命令,并不会涉及子shell。 在命令行提示符下运行脚本时一定要留心!
执行数学运算:
expr命令:较笨拙,且会有问题出现
tonglei@MacBook-Pro-3:/home/wwwroot/shell$ expr 2 * 5
expr: syntax error
tonglei@MacBook-Pro-3:/home/wwwroot/shell$ expr 2 \* 5
10
$[ operation ] 相对expr命令简单很多,且可直接识别 * 运算符,因为在方括号内;
bash shell数学运算符只支持整数运算。z shell(zsh)提供了完整的浮点数算术操作;
tonglei@MacBook-Pro-3:/home/code/shell-demo$ echo $[100 / 45]
2
浮点运算最常见的方案是用内建的bash计算器bc来解决;
variable=$(echo "options; expression" | bc)
退出脚本:
退出状态码:shell中运行的每个命令都使用退出状态码(exit status)告诉shell它已经运行完毕。退出状态 码是一个0~255的整数值,在命令结束运行时由命令传给shell。
状态码
描述
0
命令成功结束
1
一般性未知错误
2
不适合的shell命令
126
命令不可执行
127
没找到命令
128
无效的退出参数
128+x
与Linux信号x相关的严重错误
130
通过Ctrl+C终止的命令
255
正常范围之外的退出状态码
用变量$?来保存上个已执行命令的退出状态码,对于需要进行检查的 命令,必须在其运行完毕后立刻查看或使用$?变量;
exit命令: 允许你在脚本结束时指定一 个退出状态码。
退出状态码被缩减到了0~255的区间。shell通过模运算得到这个结果。一个值的模就是被除 后的余数。最终的结果是指定的数值除以256后得到的余数。在这个例子中,指定的值是300(返 回值),余数是44,因此这个余数就成了最后的状态退出码。
tonglei@MacBook-Pro-3:/home/code/shell-demo$ cat basic.sh
#!/bin/bash
exit 300
tonglei@MacBook-Pro-3:/home/code/shell-demo$ bash basic.sh
tonglei@MacBook-Pro-3:/home/code/shell-demo$ echo $?
44
参考资料: 《Linux命令行与shell脚本编程大全》2,3版
查看代码
打赏
微信扫一扫,打赏作者吧~