高级Bash脚本编程(二)
退出
退出状态码
- 退出:exit 被用来结束一个脚本,它也返回一个值,并且这个值会传递给脚本的父进程,父进程会使用这个值做下一步的处理。
- 每个命令都会返回一个退出状态码,成功的命令返回 0,不成功的命令返回非零值,非零值通常都被解释成一个错误码。
- 练习截图
反转条件用法
! 逻辑“非”操作符,将会反转命令或条件测试的结果,并且这会影响退出状态码。
条件判断
if/then 结构用来判断命令列表的退出状态码是否为 0,因为0表示成功,如果成功的话,这里应该那么就执行接下来的一个或多个命令。true返回的是0,false返回的是1
- test3.sh
多级比较
#!/bin/bash
if echo "Next *if* is part of the comparison for the first *if*."
if [[ $comparison = "integer" ]]
then (( a < b )) # (( 算数表达式 )), 用作算数运算
else
[[ $a < $b ]]
fi
then
echo '$a is less than $b'
fi
- 注意: ((...))和let...如果运算结果为非0,该语句退出码为0,否则为1;[[...]]是作为一个单独的语句并且会返回一个退出码
,真返回0,假返回1.
真假判断
NULL和未初始化的变量、初始化为Null的变量,$false为假
(( )) 结构
- 扩展并计算一个算术表达式的值。如果表达式的结果为0,那么返回的退出状态码为1,或者是"假"。而一个非零值的表达式所返回的退出状态码将为0,或者是"true"。
- (( ... ))结构可以用来计算并测试算术表达式的结果,退出状态将会与[ ... ]结构完全相反。
文件测试操作符
操作符
说明
- -e 文件存在
- -a 文件存在,这个选项的效果与 -e 相同。但是它已经被“弃用”了,并且不鼓励使用。
- -f 表示这个文件是一个一般文件(并不是目录或者设备文件)
- -s 文件大小不为零
- -d 表示这是一个目录
- -b 表示这是一个块设备(软盘,光驱,等等)
- -c 表示这是一个字符设备(键盘,modem,声卡,等等)
- -p 这个文件是一个管道
- -h 这是一个符号链接
- -L 这是一个符号链接
- -S 表示这是一个socket
- -t 文件(描述符)被关联到一个终端上,这个测试选项一般被用来检测脚本中的stdin([ -t 0 ]) 或者 stdout([ -t 1 ])是否来自于一个终端
- -r 文件是否具有可读权限(指的是正在运行这个测试命令的用户是否具有读权限)
- -w 文件是否具有可写权限(指的是正在运行这个测试命令的用户是否具有写权限)
- -x 文件是否具有可执行权限(指的是正在运行这个测试命令的用户是否具有可执行权限)
- -g set-group-id(sgid)标记被设置到文件或目录上
- -k 设置粘贴位
- -O 判断你是否是文件的拥有者
- -G 文件的group-id是否与你的相同
- -N 从文件上一次被读取到现在为止, 文件是否被修改过
- f1 -nt f2 文件f1比文件f2新
- f1 -ot f2 文件f1比文件f2旧
- f1 -ef f2 文件f1和文件f2是相同文件的硬链接
- ! “非”,反转上边所有测试的结果(如果没给出条件,那么返回真)
二元比较操作符
整数比较
-
-eq 等于
if [ "(a" -eq ")b" ] -
-ne 不等于
if [ "(a" -ne ")b" ] -
-gt 大于
if [ "(a" -gt ")b" ] -
-ge 大于等于
if [ "(a" -ge ")b" ] -
-lt 小于
if [ "(a" -lt ")b" ] -
-le 小于等于
if [ "(a" -le ")b" ] -
< 小于(在双括号中使用)
(("(a" < ")b")) -
<= 小于等于(在双括号中使用)
(("(a" <= ")b")) -
大于(在双括号中使用)
(("(a" > ")b")) -
= 大于等于(在双括号中使用)
(("(a" >= ")b"))
字符串比较
-
= 等于
if [ "(a" = ")b" ] -
== 等于,与=等价
if [ "(a" == ")b" ] -
!= 不等号
if [ "(a" != ")b" ] -
< 小于,按照ASCII字符进行排序
if [[ "(a" < ")b" ]]
if [ "(a" < ")b" ]
注意"<"使用在[ ]结构中的时候需要被转义 -
大于,按照ASCII字符进行排序
if [[ "(a" > ")b" ]]
if [ "(a" > ")b" ]
注意“>”使用在[ ]结构中的时候需要被转义 -
-z 字符串为“null”,意思就是字符串长度为零 -n 字符串不为“null”