71:循環之for、while、break、continue、exit

一、for循環語法:      for   變量名     in   條件;do......;doneshell

1:案例1:求1加到100的和:vim

[root@localhost_02 for]# vim for1.sh 
#!/bin/bash
sum=0
for i in `seq 1 100`
do 
  sum=$[$sum+$i]
echo $i
done
echo $sum

註釋:首先須要給sum賦一個變量值0,進入for循環後,每循環一次,sum的值向上加一次就變化一次,一直到$i,最後輸出結果$sum:bash

註釋:加減法的固定格式: sum=$sum[$sum+$i]code

2:案例2:for循環文件列表,列出/etc/目錄下的子目錄:字符串

[root@localhost_02 for]# cat for2.sh 
#!/bin/bash
cd /etc/
for i in `ls /etc/`
do
   if [ -d $i ]
then
   echo $a
   ls -ld $i
fi
done
[root@localhost_02 for]# for i in `seq 1 3`;do echo $i;done
1
2
3
[root@localhost_02 for]# for i in 1 2 3;do echo $i;done
1
2
3

註釋:for循環會以回車或者空格做爲分隔符:以下:input

[root@localhost_02 test]# touch 1 2 
[root@localhost_02 test]# touch 3\ 4.txt
[root@localhost_02 test]# ls -la
-rw-r--r-- 1 root root  0 9月  26 16:45 1
-rw-r--r-- 1 root root  0 9月  26 16:45 2
-rw-r--r-- 1 root root  0 9月  26 16:45 3 4.txt
[root@localhost_02 test]# for i in `ls ./`;do echo $i;done
1
2
3
4.txt

二、while循環語法:while  條件;do .......;doneit

案例1:寫一個監控負載的腳本:for循環

[root@localhost_02 shell]# cat while.sh 
#!/bin/bash
while :
#冒號表示循環,此處能夠用1或者true均可以;
do 
     load=`uptime|awk -F 'load average: ' '{print $2}'|cut -d . -f1`
     if [ $load -ge 10 ]
     then 
              /usr/local/sbin/mail.py xxx@163.com "load high" "$load"
     fi
     sleep 30 
#休眠30秒後,繼續檢測系統的負載;
done
[root@localhost_02 shell]# sh -x while.sh 
+ :
++ awk -F 'load average: ' '{print $2}'
++ cut -d . -f1
++ uptime
+ load=0
+ '[' 0 -ge 10 ']'
+ sleep 30
若想這種腳本不意外的終止,能夠打開screen,在screen跑腳本;

註釋class

uptime表示查看awk系統的負載,(能夠用w,不過須要結合head -1使用):test

awk -F 'load average: ' '{print $2}  表示以load  average爲分隔符,並打印第二端:

cut -d .  -f1  表示用cut命令以 . 點做爲分隔符,取第一個字符:

while循環案例2:輸入一個數字,若是不是數字,則一直輸入,輸入是數字後則正常顯示:

[root@localhost_02 shell]# cat while1.sh 
#!/bin/bash
while :
do 
      read -p "Please input number: " n
      if [ -z "$n" ]
      then
        echo "you need input sth"
        continue
      fi
      n1=`echo $n|sed s/[0-9]//g`
      if [ -n "$n1" ]
      then 
      echo "you just only input numbers"
      continue
      fi
      break
done 
echo $n
[root@localhost_02 shell]# sh while1.sh 
Please input number: 
you need input sth
Please input number: 
you need input sth
Please input number: sdfs
you just only input numbers
Please input number: 2
2

註釋:contiune   繼續循環:     

break:用於循環語句,直接結束全部循環:當數字等於3時,則結束全部循環:

註釋:以下圖例表示結束了if和for循環,而後繼續打印echo內容:

[root@localhost_02 shell]# cat break.sh 
#!/bin/bash
for i in `seq 1 5`
do
    echo $i
    if [ $i -eq 3 ]
#比較數字,用-eq ;如果比較的是字符串,那須要用 ==
    then
       break
    fi
    echo $i
done
echo aaaaa
檢測:
[root@localhost_02 shell]# sh -x break.sh 
++ seq 1 5
+ for i in '`seq 1 5`'
+ echo 1
1
+ '[' 1 -eq 3 ']'
+ echo 1
1
+ for i in '`seq 1 5`'
+ echo 2
2
+ '[' 2 -eq 3 ']'
+ echo 2
2
+ for i in '`seq 1 5`'
+ echo 3
3
+ '[' 3 -eq 3 ']'
+ break
+ echo aaaaa
aaaaa
[root@localhost_02 shell]# sh break.sh 
1
1
2
2
3
aaaaa
[root@localhost_02 shell]#

continue:結束本次循環,忽略continue下面的代碼,直接進行下一次循環:

註釋:以下圖例表示忽略了本次continue下的代碼(條件是等於3),其他代碼正常運行:

[root@localhost_02 shell]# cat con.sh 
#!/bin/bash
for i in `seq 1 5`
do
    echo $i
    if [ $i -eq 3 ]
    then
	continue
    fi
    echo $i
done
echo bbbbb
[root@localhost_02 shell]# sh con.sh 
1
1
2
2
3
4
4
5
5
bbbbb

exit:退出整個腳本,用來肯定腳本運行到什麼位置時結束:

註釋:以下圖例表示直接退出整個腳本了:

[root@localhost_02 shell]# cat exit.sh 
#!/bin/bash
for i in `seq 1 5`
do
    echo $i
    if [ $i -eq 3 ]
    then
	exit
    fi
     echo $i
done
echo $ccccc
[root@localhost_02 shell]# sh exit.sh 
1
1
2
2
3
相關文章
相關標籤/搜索