天天看點

shell循環結構之for循環

for循環

文法:

1)

for 變量 in 取值清單; do

statement

statement

done

2)

for 變量 in 取值清單 

do

statement

statement

done 

取值清單:

數字

10 20 30

使用seq指令生成數字的序列

seq 10

seq 3 10

seq 1 2 10

字元

aa bb cc 

檔案

編寫腳本,計算1---100的和

#!/bin/bash

#

sum=0

for i in `seq 100`; do

   let sum=$sum+$i

done

echo $sum

編寫腳本,計算1--100所有奇數的和

#!/bin/bash

#

sum=0

for i in `seq 100`; do

   let ys=$i%2

   if [ $ys -ne 0 ]; then

      let sum=$sum+$i

   fi

done

echo $sum

編寫腳本,實作批量建立使用者user1...user10

#!/bin/bash

#

for i in `seq 10`; do

   if ! id user$i &> /dev/null; then

        useradd user$i

        echo "redhat" | passwd --stdin user$i &> /dev/null

        echo "使用者user$i建立完成,初始密碼為redhat"

   else

        echo "使用者user$i已經存在"

   fi

done

編寫腳本,檢測172.16.20.0/24線上主機IP

#!/bin/bash

#

network=172.16.20.

for i in `seq 254`; do

   if ping -c 1 -W 1 $network$i &> /dev/null; then

echo "Host $network$i is up"

   fi

done

啟動多線程:

#!/bin/bash

#

network=172.16.80.

for i in `seq 254`; do

    {

    if ping -c 1 -W 1 $network$i &> /dev/null; then

       echo "Host $network$i is up"

    fi

    }&

done

wait

以字元作為取值清單 

#!/bin/bash

#

for name in alice natsha kira merry; do

   useradd $name

   echo "$name create finished."

done

以檔案作為取值清單 

`cat FILE`

編寫腳本,向系統中所有使用者打招呼  

#!/bin/bash

#

for i in `awk -F: '{print $1}' /etc/passwd`; do

echo "Hello, $i"

done

編寫腳本, 将某目錄下所有以.txt結尾的檔案改為以.mp3結尾 

#!/bin/bash

#

for i in `ls -l /tmp/test | grep "txt$" | awk '{print $9}'`; do

    file_name=`echo $i | awk -F. '{print $1}'`

    mv /tmp/test/$i /tmp/test/$file_name.mp3

done

編寫腳本, 分别統計/bin/bash和/sbin/nologin使用者的個數 

#!/bin/bash

#

bash_number=0

nologin_number=0

line=$(wc -l /etc/passwd | awk '{print $1}')

for i in `seq $line`; do

  sh_name=$(head -n $i /etc/passwd | tail -1 | awk -F: '{print $7}')

  case $sh_name in

    /sbin/nologin)

        let nologin_number=$nologin_number+1

        ;;

    /bin/bash)

        let bash_number=$bash_number+1

        ;;

   esac

done

echo "shell為/bin/bash的:$bash_number"

echo "shell為/sbin/nologin的:$nologin_number"

編寫腳本,顯示九九乘法表 

#!/bin/bash  

#for嵌套for循環  

#9*9乘法口訣  

echo "for的九九乘法表"  

for(( i=1 ;i<=9;i++ ))  

do  

   for(( j=1;j<=9;j++ ))  

   do  

      #當$j小于等于$i,在螢幕上列印乘法表  

      [ $j -le $i ] && echo -n "$i*$j=$[ $i * $j ]  "  

   done  

   echo ''  

done

中斷循環的語句

break 中斷整體循環

continue 中斷本次循環

break用法:

#!/bin/bash

#

sum=0

for i in `seq 100`; do

   let sum=$sum+$i

   if [ $sum -ge 3000 ]; then

echo $i

break

   fi

done

continue用法:

#!/bin/bash

#

sum=0

for i in `seq 100`; do

   let ys=$i%2

   if [ $ys -eq 0 ]; then

continue

   fi

   let sum=$sum+$i

done

echo $sum

編寫腳本,列出系統中shell為/bin/bash的前5個使用者名 

#!/bin/bash

#

number=0

line=$(wc -l /etc/passwd | awk '{print $1}')

for i in `seq $line`; do

   sh_name=`head -n $i /etc/passwd | tail -1 | awk -F: '{print $7}'`

   if [ $sh_name == "/bin/bash" ]; then

        name=`head -n $i /etc/passwd | tail -1 | awk -F: '{print $1}'`

        echo -n "$name  "

        let number=$number+1

        if [ $number -eq 5 ]; then

                break

        fi

   fi

done

echo

本文轉自 北冥有大魚  51CTO部落格,原文連結:http://blog.51cto.com/lyw168/1957413,如需轉載請自行聯系原作者

繼續閱讀