shell腳本基礎(三)
阿新 • • 發佈:2018-04-20
shell一、for循環
實例2:列出
for循環結構是日常運維工作中用的很頻繁的循環結構。
1、for循環具體格式:
for 變量名 in 循環條件; do
command
done
這裏的“循環條件”可以是一組字符串揮著數字(用空格隔開),也可以是一條命令的執行結果。
2、for循環實例
實例1:計算1到5之和
[root@zlinux-01 shell]# vim for01.sh #! /bin/bash sum=0 for i in `seq 1 5` do echo $i sum=$[$sum+$i] done echo $sum [root@zlinux-01 shell]# sh for01.sh 1 2 3 4 5 15
實例2:列出/etc/
目錄下包含單詞yum
的目錄。
[root@zlinux-01 shell]# vim for2.sh
#! /bin/bash
cd /etc/
for i in `ls /etc/`; do
if [ -d $i ]; then
ls -ld $i | grep -w ‘yum‘
fi
done
[root@zlinux-01 shell]# sh for2.sh
drwxr-xr-x. 6 root root 100 3月 16 04:04 yum
drwxr-xr-x. 2 root root 248 4月 12 14:53 yum.repos.d
二、while循環
1、while循環格式
格式1:
while 條件; do
command
done
格式2:死循環
# 冒號代替條件
while : ; do
command
sleep 30
done
2、while循環實例
實例1:當系統負載大於10的時候,發送郵件,每隔30秒執行一次
[root@zlinux-01 shell]# vim while01.sh #!/bin/bash while : do load=`w|head -1 |awk -F ‘load average: ‘ ‘{print $2}‘| cut -d . -f1` if [ $load -eq 0 ] then python /usr/lib/zabbix/alertscripts/mail.py [email protected] "load is high:$load" "$load" fi sleep 30 done ##python行表示使用郵件腳本發送負載狀況,這裏為了實驗,把load設為等於0,mail.py腳本在之前zabbix實驗中設置 #‘while :‘表示死循環,也可以寫成while true,意思是“真” #Attention:awk -F ‘load average: ‘此處指定‘load average: ‘為分隔符,註意冒號後面的空格 #如果不加該空格,過濾出來的結果會帶空格,需要在此將空格過濾掉
實驗結果:
說明:如果不手動停止該腳本,它會一直循環執行(按Ctrl+c結束),實際環境中配合screen使用。
實例2:交互模式下,用戶輸入一個字符,檢測該字符是否符合條件,如:空、非數字、數字。分別對字符做出判斷,然後做出不同的回應。
[root@zlinux-01 shell]# vim while02.sh
#!/bin/bash
while true
do
read -p "Please input a number:" n
if [ -z "$n" ]
then
echo "You need input some characters!"
continue
fi
n1=`echo $n|sed ‘s/[-0-9]//g‘`
if [ -n "$n1" ]
then
echo "The character must be a number!"
continue
fi
break
done
echo $n
#continue:中斷本次while循環後重新開始;
#break:表示跳出本層循環,即該while循環結束
三、break、continue和exit用法
break跳出循環
continue結束本次循環
exit退出整個腳本
[root@zlinux-01 shell]# vim break.sh
#!/bin/bash
for i in `seq 1 5`
do
echo $i
if [ $i -eq 3 ]
then
break #此處課替換continue和exit,執行腳本查看區別
fi
echo $i
done
echo $i
shell腳本基礎(三)