Linux Shell編程(9) - 流程控制語句(三)循環語句:for、while、until

1、for循環

1. 語法

語法1

for 變量 in 值1 值2 值3 ... 值n
    do
        程序
    done

語法2

for (( 初始值;循環控制條件;變量變化 ))
    do
        程序
    done

2. 應用

批量解壓縮腳本

  • for_tar.sh
#!/bin/bash

cd /tmp/tmp

for i in $(ls *.tar.gz)
    do
        tar -zxf $i & > /dev/null
    done
  • 爲 for_tar.sh腳本添加執行權限
[root/tmp]# chmod +x for_tar.sh
  • 運行腳本前
[root/tmp]# ll tmp/
總用量 20K
-rw-r--r-- 1 root root 167 6月   5 11:13 file1.tar.gz
-rw-r--r-- 1 root root 119 6月   5 11:12 file2.tar.gz
-rw-r--r-- 1 root root 120 6月   5 11:12 file3.tar.gz
-rw-r--r-- 1 root root 119 6月   5 11:12 file4.tar.gz
-rw-r--r-- 1 root root 120 6月   5 11:12 file5.tar.gz
  • 運行腳本後
[root/tmp]# ./for_tar.sh

[root/tmp]# ll tmp/
總用量 40K
-rw-r--r-- 1 root root  43 6月   5 11:13 file1
-rw-r--r-- 1 root root 167 6月   5 11:13 file1.tar.gz
-rw-r--r-- 1 root root   5 6月   5 11:11 file2
-rw-r--r-- 1 root root 119 6月   5 11:12 file2.tar.gz
-rw-r--r-- 1 root root   5 6月   5 11:12 file3
-rw-r--r-- 1 root root 120 6月   5 11:12 file3.tar.gz
-rw-r--r-- 1 root root   5 6月   5 11:12 file4
-rw-r--r-- 1 root root 119 6月   5 11:12 file4.tar.gz
-rw-r--r-- 1 root root   5 6月   5 11:12 file5
-rw-r--r-- 1 root root 120 6月   5 11:12 file5.tar.gz

批量建立用戶

  • for_useradd.sh
#!/bin/bash

#批量添加指定數量的用戶實例
read -t 30 -p "input user name:" name
read -t 30 -p "input password:" pass
read -t 30 -p "input user number:" num

#檢查輸入內容是否都爲非空
if [ -z "$name" -o -z "$pass" -o -z "$num" ]
    then
        echo "Error,must be input name,password,number"
        exit 1
fi

#檢查輸入的用戶數量是否爲純數字 
chknum=$( echo "$num" | sed 's/[0-9]//g' )
if [ -n "$chknum" ]
    then
        echo "Error,the number must be number"
        exit 2
fi

for (( i=1;i<="$num";i=i+1 ))
    do
        #添加用戶
        /usr/sbin/useradd $name$i
        #添加用戶密碼,passwd 的--stdin參數是非交互輸入,直接傳入密碼,不須要第二次確認
        echo $pass | /usr/bin/passwd --stdin $name$i
        echo "add $i"
    done
  • 爲 for_useradd.sh腳本添加執行權限
[root/tmp]# chmod +x for_useradd.sh
  • 運行腳本
[root/tmp]# ./for_useradd.sh
input user name:name
input password:name
input user number:10
更改用戶 name1 的密碼 。
passwd:全部的身份驗證令牌已經成功更新。
add 1
更改用戶 name2 的密碼 。
passwd:全部的身份驗證令牌已經成功更新。
add 2
更改用戶 name3 的密碼 。
passwd:全部的身份驗證令牌已經成功更新。
add 3
更改用戶 name4 的密碼 。
passwd:全部的身份驗證令牌已經成功更新。
add 4
更改用戶 name5 的密碼 。
passwd:全部的身份驗證令牌已經成功更新。
add 5
更改用戶 name6 的密碼 。
passwd:全部的身份驗證令牌已經成功更新。
add 6
更改用戶 name7 的密碼 。
passwd:全部的身份驗證令牌已經成功更新。
add 7
更改用戶 name8 的密碼 。
passwd:全部的身份驗證令牌已經成功更新。
add 8
更改用戶 name9 的密碼 。
passwd:全部的身份驗證令牌已經成功更新。
add 9
更改用戶 name10 的密碼 。
passwd:全部的身份驗證令牌已經成功更新。
add 10
  • 查看新增長的用戶
[root/tmp]# cat /etc/passwd | grep ^name
name1:x:1002:1002::/home/name1:/bin/bash
name2:x:1003:1003::/home/name2:/bin/bash
name3:x:1004:1004::/home/name3:/bin/bash
name4:x:1005:1005::/home/name4:/bin/bash
name5:x:1006:1006::/home/name5:/bin/bash
name6:x:1007:1007::/home/name6:/bin/bash
name7:x:1008:1008::/home/name7:/bin/bash
name8:x:1009:1009::/home/name8:/bin/bash
name9:x:1010:1010::/home/name9:/bin/bash
name10:x:1011:1011::/home/name10:/bin/bash

批量刪除全部普通用戶

  • for_userdel.sh
#!/bin/bash

user=$(cat /etc/passwd | grep /bin/bash | grep -v root | cut -d ":" -f1)

for i in $user
    do
        userdel -r $i
    done
  • 爲 for_userdel.sh腳本添加執行權限
[root/tmp]# chmod +x for_userdel.sh
  • 運行腳本
./for_userdel.sh
  • 查看用戶
[root/tmp]# cat /etc/passwd | grep /bin/bash
root:x:0:0:root:/root:/bin/bash

從 1 加到 100

  • for_sum.sh
#!/bin/bash

s=0
for(( i=1;i<=100;i=i+1))
    do
        s=$(($s+$i))
    done
    
echo "sum is: $s"
  • 爲 for_sum.sh 腳本添加執行權限
[root/tmp]# chmod +x for_sum.sh
  • 運行腳本
[root/tmp]# ./for_sum.sh
sum is: 5050

2、while循環

while 循環是不定循環,又稱做條件循環。只要條件判斷式成立,循環就會一直繼續,直到條件判斷式不成立,循環纔會中止。這就和 for 的固定循環不太同樣了。

寫 while 循環時要特別注意不要寫成死循環。bash

1. 語法

while [ 條件判斷式 ]
    do
        程序
    done

2. 應用

從 1 加到 100

  • while_sum.sh
#!/bin/bash

i=1
s=0

while [ $i -le 100 ]
    do
        s=$(( $s+$i ))
        i=$(( $i+1 ))
    done
    
echo "sum is: $s"
  • 爲 while_sum.sh 腳本添加執行權限
[root/tmp]# chmod +x while_sum.sh
  • 運行腳本
[root/tmp]# ./while_sum.sh
sum is: 5050

3、until循環

until 循環和 while 循環相反,until 循環時只要條件判斷式不成立則進行循環,並執行循環程序。一旦循環條件成立,則終止循環。

寫 until 循環是要特別注意不要寫成死循環。code

1. 語法

until [ 條件判斷式 ]
    do 
        程序
    done

2. 應用

從 1 加到 100

  • until_sum.sh
#!/bin/bash

i=1
s=0

until [ $i -gt 100 ]
    do
        s=$(( $s+$i ))
        i=$(( $i+1 ))
    done
    
echo "sum is: $s"
  • 爲 until_sum.sh 腳本添加執行權限
[root/tmp]# chmod +x until_sum.sh
  • 運行腳本
[root/tmp]# ./until_sum.sh
sum is: 5050
相關文章
相關標籤/搜索