- if-then
if command
then
commands
fi
一个例子:
只要if后面的命令运行完成后,退出状态码正常,即为0,then部分的命令就会执行。
- if-then-else
if command
then
commands
else
commands
fi
- 嵌套if
if command1
then
commands
elif command2
then
more commands
fi
- test命令
test测试条件是否成立,成立test返回状态码0,不成立,返回错误状态码。
if test condition
then
commands
fi
或者
if [ condition ] #括号间要有空格
then
commands
fi
test可以判断3类条件:
数值比较:
n1 -eq 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
bash shell仅能处理整数。bash计算器将浮点值作为字符串值存储进一个变量。
字符串比较
str1 = str2 是否相同
str1 != str2 是否不同
str1 < str2 1是否比2小
str1 > str2 1 是否比2大
-n str1 str1的长度是否非0
-z str1 str1的长度是否为0 对于不存在的变量,是按空变量来处理的
> 和 <号需要用转移符
对于大写字母和小写字母的比较 test跟sort顺序是不一样的,sort是大写大,test是小写大
文件比较
-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 检测fiile是否存在并且默认组与当前用户相同
file1 -nt file2 检测file1是否比file2新
file1 -ot file2 检测file1是否比file2旧
- 复合条件测试
&& 逻辑与
|| 逻辑或
- if-then的高级特性
双小括号
双方括号 针对字符串
- case
跟 c语言的 switch类似
- for命令
for var in list
do
commands
done
- while
while test command
do
other commands
done
while可以指定多个值,只有最后一个测试命令的状态码会被while采用
- until
until test commands
do
other commands
done
until也可以有多个测试命令,但是只有最后一个命令的退出状态码会被while采用
- 嵌套循环
for循环嵌套for循环的例子:
- 循环处理文件数据
处理/etc/passwd文件
- 控制循环
break命令退出循环
跳出外部循环 break n 你说明跳出循环的层级,默认n为1,跳出当前循环。设置n为2的话就会停止下一级的外部循环。
continue命令,只是跳出挡圈循环
continue n 中 n定义要继续的循环层级
- 处理循环输出
done后面 > test.txt 输出从定向
done后面 | sort 输出结果排序