1. 程式人生 > >shell腳本基礎(三)

shell腳本基礎(三)

shell

一、for循環

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腳本基礎(三)