1. 程式人生 > 實用技巧 >shell指令碼--迴圈語句、(概念及例項)

shell指令碼--迴圈語句、(概念及例項)

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 是水平製表符)
例項:
直角三角形