shell指令碼--迴圈語句、(概念及例項)
阿新 • • 發佈:2020-11-18
shell指令碼–迴圈語句、函式和陣列
一、迴圈語句
1.1for語句的結構
●讀取不同的變數值,用來逐個執行同一組命令
●for迴圈:指定次數迴圈;遍歷:把集合中的每個元素挨個讀取一遍
結構一:遍歷集合 for 變數名 in 取值列表 do 命令序列 done 結構二:指定次數 for ((i=1;i<=5;i++)) do 命令序列 done
1.2for語句應用例項
例項1:
批量新增使用者
使用者名稱存放在user.txt檔案中,每行一個
初始密碼均設為123123
[root@server1 ~]# sh user.sh 更改使用者 zhangsan 的密碼 。 passwd:所有的身份驗證令牌已經成功更新。 建立zhangsan成功 更改使用者 lisi 的密碼 。 passwd:所有的身份驗證令牌已經成功更新。 建立lisi成功 更改使用者 wanger 的密碼 。 passwd:所有的身份驗證令牌已經成功更新。 建立wanger成功 更改使用者 mazi 的密碼 。 passwd:所有的身份驗證令牌已經成功更新。 建立mazi成功 [root@server1 ~]#
例項2:
根據IP地址檢查主機狀態
IP地址存放在ip.txt檔案中,每行一個
使用ping命令檢測各主機的連通性
[root@server1 ~]# sh ping.sh PING 20.0.0.20 (20.0.0.20) 0(28) bytes of data. 8 bytes from 20.0.0.20: icmp_seq=1 ttl=64 8 bytes from 20.0.0.20: icmp_seq=2 ttl=64 8 bytes from 20.0.0.20: icmp_seq=3 ttl=64 --- 20.0.0.20 ping statistics --- 3 packets transmitted, 3 received, 0% packet loss, time 2001ms 主機20.0.0.20存活 PING 20.0.0.30 (20.0.0.30) 0(28) bytes of data. --- 20.0.0.30 ping statistics --- 3 packets transmitted, 0 received, 100% packet loss, time 2002ms 主機20.0.0.30宕機 PING 20.0.0.40 (20.0.0.40) 0(28) bytes of data. 8 bytes from 20.0.0.40: icmp_seq=1 ttl=64 8 bytes from 20.0.0.40: icmp_seq=2 ttl=64 8 bytes from 20.0.0.40: icmp_seq=3 ttl=64 --- 20.0.0.40 ping statistics --- 3 packets transmitted, 3 received, 0% packet loss, time 2005ms 主機20.0.0.40存活 PING 20.0.0.70 (20.0.0.70) 0(28) bytes of data. --- 20.0.0.70 ping statistics --- 3 packets transmitted, 0 received, 100% packet loss, time 2004ms 主機20.0.0.70宕機
1.3for語句中使用(( ))
使用以下符號需要先加let或者兩個小括號((sum+=$i))
符號後面可以跟整數,也可以跟呼叫的變數
++ 自身變數加1 – 自身變數減1
+=5 自身變數加5 -=5 自身變數減5
*=5 自身變數乘5 /=5 自身變數除5
%=5 自身變數取餘5
例項1:
在螢幕上輸出1-10
1.4while語句的結構
重複測試某個條件,只要條件成立則反覆執行
注意:
if條件成立只執行一次,而while成立了會反覆執行,直到不成立
for可以先定義一個集合,再通過臨時變數進行遍歷
例項1:
批量建立5個使用者:
使用者名稱以stu開頭,按數字進行編號,即st1、st2……
初始密碼均為123123
例項2:
輸出1-100不能被3整除的數
1.5雙重迴圈
外層迴圈控制行;內層迴圈控制列
外層迴圈執行一次,內層迴圈執行一遍
列印一個直角三角形
echo -n ##不換行輸出
echo -e ##支援加反斜線轉義的字元(例如 \t 是水平製表符)
例項:
直角三角形