目录
一、if else
在 sh/bash 里,else 分支没有语句执行,就不要写这个 else。
1.fi
if 格式:
if condition
then
command1
command2
...
fi
写成一行:
if [ $(ps -ef | grep -c "ssh") -gt 1 ]; then echo "true"; fi
末尾 fi 就是 if 倒过来。
2.if else
if else 格式:
if condition
then
command1
command2
...
else
command
fi
3.if else-if else
if else-if else 格式:
if condition1
then
command1
elif condition2
then
command2
else
commandN
fi
实例:判断两个变量是否相等
a=10 b=20
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
输出结果:
a 小于 b
if else 经常与 test 命令结合使用。
实例:
num1=$[2*3]
num2=$[1+5]
if test $[num1] -eq $[num2]
then
echo "两个数字相等"
else
echo "两个数字不等"
fi
输出结果:
两个数字相等
二、for循环
for 格式:
for var in item1 item2 ... itemN
do
command1
command2
...
done
写成一行:
for var in item1 item2 ... itemN; do command1; command2... done;
实例:
for loop in 1 2 3 4 5
do
echo "值是:$loop"
done
执行结果:
值是: 1
值是: 2
值是: 3
值是: 4
值是: 5
三、while语句
while 用于不断执行一系列命令。
也用于从输入文件中读取数据。
while condition
do
command
done
实例:
int=1
while(( $int <= 5 ))
do
echo $int
let int++
done
运行输出:
1
2
3
4
5
Bash let 命令,用于执行一个或多个表达式,变量计算中不需要加 $ 来表示变量。
echo "按 Ctrl+D 结束输入。"
echo -n "输入你最喜欢的人:"
while read Name
do
echo "$Name"
done
运行输出:
输入你喜欢人的名字:wangke
wangke
1.无限循环
while
do
command
done
或
while true
do
command
done
或
for (( ; ; ))
四、until循环
until
不断执行一些列命令直至条件为 true 结束。
until
与 while
刚好相反。
一般 while
循环优于until
循环。
until condition
do
command
done
condition 的值为 false,继续执行循环语句,否则跳出循环。
实例:
a=0
until [ ! $a -lt 10 ]
do
echo $a
a=` expr $a + 1 `
done
运行结果:
0
1
2
3
4
5
6
7
8
9
1.case...esac
case...esac
为多选择语句。与其他语言中的 switch...case 类似。
每个 case 分支用右括号开始,用两个;;
表示break,即执行结束。
case 值 in
模式1)
command1
command2
...
commandN
;;
模式2)
command1
command2
...
commandN
;;
esac
case 值后面必须是 in
,每种模式以右括号结束。值与模式匹配后,里面的命令开始执行直至;;
。
没有匹配,使用*
捕获该值,再执行后面的命令。
实例:
echo "输入 1 到 3 之间的数字"
echo "你输入的是:"
read Num
case $Num in
1) echo "你输入的是1"
;;
2) echo "你输入的是2"
;;
3) echo "你输入的是3"
;;
*) echo "你没有输入 1 到 3 的数字"
;;
esac
运行结果:
输入 1 到 3 之间的数字
你输入的是:
1
你输入的是1
五、跳出循环
1.break
break
跳出所有循环(终止后面的所有循环)
while :
do
echo -n "输入 1 到 3 的数字:"
read Num
case $Num in
1|2|3) echo "你输入的数字是:$Num。"
;;
*) echo "你输入的不是 1 到 3 的数字。"
break
;;
esac
done
运行结果:
输入 1 到 3 的数字:2
你输入的数字是:2。
输入 1 到 3 的数字:3
你输入的数字是:3。
输入 1 到 3 的数字:5
你输入的不是 1 到 3 的数字。
2.continue
continue
不会跳出所有循环,仅跳出当前循环。
while :
do
echo -n "输入 1 到 3 的数字:"
read Num
case $Num in
1|2|3) echo "你输入的数字是:$Num。"
;;
*) echo "你输入的不是 1 到 3的数字。"
continue
echo "游戏结束。"
;;
esac
done
运行结果:
输入 1 到 3 的数字:2
你输入的数字是:2。
输入 1 到 3 的数字:5
你输入的不是 1 到 3 的数字。
输入 1 到 3 的数字:6
你输入的不是 1 到 3 的数字。
输入 1 到 3 的数字:3
你输入的数字是:3。
当输入大于3的数字,循环不会结束。echo "游戏结束"
永远不会执行。