shell 结构化命令
if-then
if command
then
command
fi
首先会运行if后边的命令,如果命令的退出码是0
则执行then部分的命令,如果退出码是其他值,shell
则会跳过并执行下一个shell命令。
if后边可以跟多个命令
if-then-else
if command
then
command
else
command
fi
当if后边的命令返回退出状态码0时,执行then后的命令
退出状态码不是0时,执行else语句。
嵌套if
if command
then
commands
elif command2
then
more commands
fi
跟if-then的执行过程是一样的
test命令
if test condition
then
commands
其中condition是test命令要测试的一系列参数和值。
在bash中test condition也可以用【condition】来表示
test命令可以判断3类条件:
数值比较
字符串比较
文件比较
数值比较:
n1 -eq n2 检查n1是否与n2相等
n1 -ge n2 检查n1是否大于或等于n2
n1 -gt n2 检查n1是否大于n2
n1 -le n2 检查n1是否小于或等于n2
n1 -lt n2 检查n1是否小于n2
n1 -ne n2 检查n1是否不等于n2
test命令无法处理浮点数。
字符串比较功能
str1 = str2 检查str1是否和str2相同
str1 != str2 检查str1是否和str2不同
str1 < str2 检查str1是否比str2小
str1 > str2 检查str1是否比str2大
-n str1 检查str1的长度是否非0
-z str1 检查str的长度是否为0
文件比较
-d file 检查file是否存在并是一个目录
-e file 检查file是否存在
-f file 检查file是否存在并是一个文件
-r file 检查file是否存在并可读
-s file 检查file是否存在并非空
-w file 检查file是否存在并可写
-x file 检查file是否存在并可执行
-o file 检查file是否存在并属当前用户所有
-G file 检查file是否存在并且默认组与当前用户相同
file1 -nt file2 检查file1是否比file2新
file1 -ot file2 检查file1是否比file2旧
if-then布尔运算
[ command ]&&[ command ] 同时满足条件才会执行
[ command ]||[ command ] 满足一个条件就可以执行
if-then的高级特性
用于数学表达式的双尖括号
用于高级字符串处理功能的双方括号
双尖括号中的运算符号不需要转义,比如>
格式如下:(( expression ))
双方括号支持模式匹配,所以可以定义正则表达式。
格式[[ expression ]]
case的用法:
case variable in
pattern1 | pattern2)command1::
pattern3)command2::
*) default commands::
esac
if-then
if command
then
command
fi
首先会运行if后边的命令,如果命令的退出码是0
则执行then部分的命令,如果退出码是其他值,shell
则会跳过并执行下一个shell命令。
if后边可以跟多个命令
if-then-else
if command
then
command
else
command
fi
当if后边的命令返回退出状态码0时,执行then后的命令
退出状态码不是0时,执行else语句。
嵌套if
if command
then
commands
elif command2
then
more commands
fi
跟if-then的执行过程是一样的
test命令
if test condition
then
commands
其中condition是test命令要测试的一系列参数和值。
在bash中test condition也可以用【condition】来表示
test命令可以判断3类条件:
数值比较
字符串比较
文件比较
数值比较:
n1 -eq n2 检查n1是否与n2相等
n1 -ge n2 检查n1是否大于或等于n2
n1 -gt n2 检查n1是否大于n2
n1 -le n2 检查n1是否小于或等于n2
n1 -lt n2 检查n1是否小于n2
n1 -ne n2 检查n1是否不等于n2
test命令无法处理浮点数。
字符串比较功能
str1 = str2 检查str1是否和str2相同
str1 != str2 检查str1是否和str2不同
str1 < str2 检查str1是否比str2小
str1 > str2 检查str1是否比str2大
-n str1 检查str1的长度是否非0
-z str1 检查str的长度是否为0
文件比较
-d file 检查file是否存在并是一个目录
-e file 检查file是否存在
-f file 检查file是否存在并是一个文件
-r file 检查file是否存在并可读
-s file 检查file是否存在并非空
-w file 检查file是否存在并可写
-x file 检查file是否存在并可执行
-o file 检查file是否存在并属当前用户所有
-G file 检查file是否存在并且默认组与当前用户相同
file1 -nt file2 检查file1是否比file2新
file1 -ot file2 检查file1是否比file2旧
if-then布尔运算
[ command ]&&[ command ] 同时满足条件才会执行
[ command ]||[ command ] 满足一个条件就可以执行
if-then的高级特性
用于数学表达式的双尖括号
用于高级字符串处理功能的双方括号
双尖括号中的运算符号不需要转义,比如>
格式如下:(( expression ))
双方括号支持模式匹配,所以可以定义正则表达式。
格式[[ expression ]]
case的用法:
case variable in
pattern1 | pattern2)command1::
pattern3)command2::
*) default commands::
esac