首頁 > 軟體

shell程式設計中for迴圈語句的實現過程及案例

2022-04-11 10:01:22

前言

本篇是shell程式設計for迴圈的實現過程以及一些案例

什麼是for迴圈

讀取不同的變數值,用來逐個執行同一組命令

for 變數名 in 取值列表
do
    命令序列
done
#用變數名去取值,然後挨個執行命令,其實就是一個遍歷的過程

迴圈體中三種專業的話術:遍歷、迭代、遞迴

[root@bogon ~]# for i in {1..10}
> do
> echo $i
> done
1
...
10
[root@bogon ~]# for i in $(seq 1 10); do echo $i; done
1
...
10
#分號可以使互動式的命令在一行執行
[root@bogon ~]# for ((i=1;i<=10;i++)); do echo $i; done
1
...
10
#類似於java、c語言

範例1:批次新增使用者

使用者名稱存放在users.txt檔案中,每行一個初始密碼均設為000000

[root@bogon sh]# vim addusers.sh
#!/bin/bash
#demo add users
 
for USER in $(cat /data/users.txt)
do
        useradd $USER
        echo "000000" |passwd --stdin $USER
done

範例2:根據IP地址檢查主機狀態

IP地址存放在ipadds.txt檔案中,每行一個使用ping命令檢測各主機的連通性

[root@bogon sh]# vim testping.txt 
#!/bin/bash
#demo test ping
 
for host in $(cat /data/ip.txt)
do
        ping -c 3 -i 0.5 -w 2 $host &> /dev/null
        if [ $? -eq 0]
        then
                echo "$host is online"
        else
                echo "$host is offline"
        fi
done

[root@bogon sh]# vim testping.txt 
#!/bin/bash
#demo test ping 192.168.109.0/24
 
for host in {1..254}
do
        ping -c 3 -i 0.5 -w 2 192.168.109.$host &> /dev/null
        if [ $? -eq 0]
        then
                echo "$host is online"
        else
                echo "$host is offline"
        fi
done

範例3:自動生成一個8位元隨機密碼 取值範圍大小寫字母和數位

字串分片

i="abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789"
   0                                                            61
 
${i:n:m}
#i是變數名,n是開始取值的下標,下標從0開始,m是取值長度
${#變數名}
#取字串長度
 
 
echo ${i:3:3}
#取值456
echo ${i:7:1}
#取值8
 
變數1+=變數2
#字串追加

生成亂數

echo $[$RANDOM % 62]
#生成0-61的亂數
 
echo $[$RANDOM % ${#i}]
#生成該變數名長度以內的亂數
 
num=$($[$RANDOM % ${#i}])
for i in {1..8}
do
    echo ${i:$num:1}
done
#從i變數值中取亂數,每次取一個,取8次

範例程式碼

[root@localhost sh]# vim random.sh
#!/bin/bash
#隨機生成8位元隨機密碼
 
#定義密碼取值範圍
String="abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789"
#迴圈8次
for i in {1..8}
do
        #每次迴圈隨機獲取0到字串長度-1的下標值
        num=$[RANDOM % ${#String}]
        #進行字串擷取
        var=${String:num:1}
        #每次追加生成密碼
        passwd+=$var
done
echo "本次生成的隨機密碼為:$passwd"

 

編寫指令碼應該注意的事項:

  1. 開頭指定使用什麼shell,例如:bash,ksh,csh等
  2. 指令碼功能描述,使用方法,作者,版本,日期等
  3. 變數名,函數名要有實際意義,函數名以動名詞形式,第二個單詞首字母要大寫。例如:updateConfig()
  4. 縮排統一用4個空格,不用TAB
  5. 取變數值使用大括號,如${varname}
  6. 刪除檔案時,如果路徑有變數的,要判斷變數有值,如rm -f ${abc}/* 如果變數abc沒有值,則會把根目錄下的檔案刪除
  7. 指令碼中儘量不要使用cd變換目錄
  8. 函數中也要有功能描述,使用依法,版本,日期等
  9. 函數的功能要單一,不要太複雜
  10. $()比` `更好
  11. 儘量不要使用多層if語句,而應該以case語句替代
  12. 如果需要執行確定次數的迴圈,應該用for語句替代while語句
  13. 輸入的引數要有正確性判斷
  14. 多加註釋,方便自己或他人閱讀。

總結

總的來說for迴圈還是比較簡單的只要理解他的固定格式就行

for 變數名 in 取值列表
do
    命令序列
done
#用變數名去取值,然後挨個執行命令,其實就是一個遍歷的過程

到此這篇關於shell程式設計中for迴圈語句實現的文章就介紹到這了,更多相關shell for迴圈語句內容請搜尋it145.com以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援it145.com!


IT145.com E-mail:sddin#qq.com