条件结构-if
shell中也有流程控制条件分支语句,格式与python有点类似。
语法如下:
if test-commands; then
consequent-commands;
elif more-test-commands; then
more-consequents;
else alternate-consequents;
fi
执行test-commands,如果返回状态是0,则执行consequent-commands。如果test-commands返回一个非零状态,则依次执行每个elif列表,如果它的退出状态为零,则执行相应的more- consequences,并完成命令。如果else alternate- consequences存在,并且if和elif命令都是非零的退出状态,则执行alternate- consequences。返回状态是最后执行的命令的退出状态,如果没有测试条件为真,则返回0。
if-then-fi(单分支)
语法格式:
if condition
then
command1
command2
...
commandN
fi
写成一行(适用于终端命令提示符):
if [ $(ps -ef | grep -c "ssh") -gt 1 ]; then echo "true"; fi
末尾需要用fi结尾。
if-then-else-fi(二分支)
语法格式:
if condition
then
command1
command2
...
commandN
else
command
fi
if-then-elif-else-fi(多分支)
语法格式:
if condition1
then
command1
elif condition2
then
command2
else
commandN
fi
举例:
以下实例判断两个变量是否相等:
read a
read b
if [ $a == $b ]
then
echo "a 等于 b"
elif [ $a -gt $b ]
then
echo "a 大于 b"
elif [ $a -lt $b ]
then
echo "a 小于 b"
else
echo "其他"
fi
输出结果:
bash test.sh
2
3
a 小于 b
条件结构 case
case … esac 为多选择语句,与其他语言中的 switch … case 语句类似,是一种多分枝选择结构,每个 case 分支用右圆括号开始,用两个分号 ;; 表示 break,即执行结束,跳出整个 case … esac 语句,esac(就是 case 反过来)作为结束标记。
可以用 case 语句匹配一个值与一个模式,如果匹配成功,执行相匹配的命令。
case … esac 语法格式如下:
case 值 in
模式1)
command1
command2
...
commandN
;;
模式2)
command1
command2
...
commandN
;;
esac
case 工作方式如上所示,取值后面必须为单词 in,每一模式必须以右括号结束。取值可以为变量或常数,匹配发现取值符合某一模式后,其间所有命令开始执行直至 ;;。
取值将检测匹配的每一个模式。一旦模式匹配,则执行完匹配模式相应命令后不再继续其他模式。如果无一匹配模式,使用星号 * 捕获该值,再执行后面的命令。
下面的脚本提示输入 1 到 3,与每一种模式进行匹配:
举例:
echo "输入数字"
read num
case $num in
1) echo "选择了1";;
2) echo "选择了2";;
3) echo "选择了3"
esac
输出:
输入1到3的数字
4
超出范围
输入1到3的数字
1
选择了1
匹配字符串:
echo "输入字符"
read str
case $str in
"python") echo "python语言";;
"java") echo "java语言";;
"php") echo "php语音";;
*) echo "不存在"
esac
输出:
输入字符
php
php语音
输入字符
abc
不存在