条件分支
if-else-fi
[root@node1 test]# vim if.sh
#!/bin/bash
amswer=30
if [ $1 -gt $answer ];then
echo "对不起,您猜大了!"
elif [ $ -lt $answer ];then
echo "对不起,您猜小了!"
else
echo "恭喜您,猜对了!"
fi
[root@node1 test]# chmod +x if.sh
[root@node1 test]# ./if.sh
case
[root@node1 test]# vim case.sh
#!/bin/bash
read -p "please input a number[1,7]:" num
case $num in
1)
echo "Mon"
exit 0
2)
echo"Tue"
exit 0
;;
3)
echo"Wen"
exit 0
;;
4)
echo"The"
exit 0
;;
5)
echo"Fri"
exit 0
;;
[6-7])
echo"Weekend"
exit 0
;;
*)
echo"number must in [1,7]"
exit 1
;;
esac
[root@node1 test]# chmod +x case.sh
[root@node1 test]# ./case.sh
please input a number[1,7]: 5
Fri
while循环
while [ condition ] ; do
命令
done
或者
while [ condition ]
do
命令
done
# 案例一:每个两秒打印系统负载情况
[root@node1 test]# vim while1.sh
#!/bin/bash
while true
do
uptime #系统负载情况
sleep 2 # 休眠2秒
done
[root@node1 test]# chmod +x while1.sh
[root@node1 test]# ./while1.sh
16:45:21 up 6:15, 1 user, loda average: 0.00, 0.01, 0.05
16:45:21 up 6:15, 1 user, loda average: 0.00, 0.01, 0.05
16:45:21 up 6:15, 1 user, loda average: 0.00, 0.01, 0.05
案例二:计算1-100的累加和
[root@node1 test]# vim while2.sh
#!/bin/bash
sum=0
i=1
while [ $i -le 100 ] ; do
sum=$((sum+i))
i=$((i+1))
done
echo "1+2+3+...+100=$sum"
[root@node1 test]# chmod +x while2.sh
[root@node1 test]# ./while2.sh
1+2+3+...+100=5050
或者
[root@node1 test]# vim while3.sh
#!/bin/bash
sum=0
i=1
while [ $i -le 100 ] ; do
let sum=$sum+$i
let i=$i+1
done
echo "1+2+3+...+100=$sum"
[root@node1 test]# chmod +x while3.sh
[root@node1 test]# ./while3.sh
1+2+3+...+100=5050
for循环
for...do...done循环
-语法
for 变量名 in 变量取值列表
do
命令
done
提示:在此结构中”in变量取值列表“可省略,省略时相当于使用for i in "$@"
#!/bin/bash
for num in 1 2 3 4 # for num in {1..4}
do
echo $num
done
使用seq -s 分隔符 起始 步长 终点
[root@node1 ~]# seq -s " " 1 1 5
1 2 3 4 5
[root@node1 ~]# seq -s "|" 1 2 10
1|3|5|7|9
#!/bin/bash
for i in `seq -s " " 1 2 10`
do
echo $i
done
# 输出结果为:1 3 5 7 9
# 输出指定路径的最大文件
#!/bin/bash
oldIFS=$IFS
IFS=$'\n'
for item in `du -a $1|sort -nr`
do
fullName=`echo $item|awk{print $2}`
if [ -f $fullName ];then
echo "the max file is:$fullName"
break
fi
done
IFS=$oldIFS
循环中递增计数器用于计行数:
#!/bin/bash
oldIFS=$IFS
IFS=$'\n'
num=0
for item in `cat $1`
do
echo $item
((num++))
done
echo "line number is:$num"
IFS=$oldIFS