文章目錄
- 一、for循環語句
-
-
- 1. 語句結構:
- 2. **入門小例子1**:求1到100的和
- 3. **入門小例子2**:批量添加使用者
- 4. 入門小例子3:測試主機是否通信
-
- 二、while循環語句
-
-
- 1. 語句結構
- 2. 入門練習小例子1:求1到100的和
- 3. 入門練習小例子2:猜數遊戲
-
- 三、until循環語句
-
-
- 1. 入門練習小例子:求1到100的和
-
- 四、結束循環
-
-
- 1. break 跳出單個循環
- ontinue 中止某次循環中的指令,但不會完全中斷
-
- 五、IFS字段分隔符
- 六、轉義字元
一、for循環語句
- for語句需要定義一個變量和取值清單,根據不同的取值執行相同的指令,直到變量值用完。
- 取值清單裡包含多個屬性相同的對象,例如:IP位址,通信錄等。
1. 語句結構:
for 變量名 in 取值清單
do
指令序列
done
2. 入門小例子1:求1到100的和
#!/bin/bash
sum=0
for i in {1..100} #取值也可表示為((i=1; i<=100; i++))
do
sum=$[$i+$sum]
done
echo "1-100的和為:$sum
3. 入門小例子2:批量添加使用者
(使用者名存放在users.txt檔案中,每行一個;初始密碼均設為“666666”)
#!/bin/bash
a=`cat /root/users.txt`
for i in $a
do
useradd $i
echo "666666" | passwd --stdin $i
done
4. 入門小例子3:測試主機是否通信
#!/bin/bash
for i in 192.168.100.{10..60..10}
do
ping -c 3 -W 2 $i &>/dev/null
if [ $? -eq 0 ]
then
echo "$i online"
else
echo "$i offline"
fi
done
# 也可同上個例子的做法 将主機寫入到一個檔案中 然後用一個變量直接取值 再指派給變量i
二、while循環語句
- 根據特定條件反複執行一個指令序列,直到不滿足條件為止。
- 編寫時可能會出現死循環,要避免這種情況發生
- true(真)和false(假)為特殊條件測試操作,也可以在if語句的條件測試中使用。
- true作為條件時,表示條件永遠成立,無限執行,也就是死循環,需要強制終止
- false作為條件時,表示條件不成立,不執行指令序列
1. 語句結構
結構同for語句類似
while 條件測試操作
do
指令序列
done
2. 入門練習小例子1:求1到100的和
#!/bin/bash
i=0 #定義初始值 結合循環範圍
sum=0
while [ $i -le 100 ]
do
sum=$[$sum+$i]
let i++ # 若不指定疊代方式 将會一直循環 因為初始值始終滿足循環範圍
done
echo "1到100的和為:$sum"
- 可以看出同上面用for循環做的 多了 let i++ 是因為while需要手動指定疊代方式
- ps:for循環都可改用while循環;但while循環不一定都可以用for循環做
3. 入門練習小例子2:猜數遊戲
通過變量RANDOM獲得随機數;提示使用者猜測并記錄次數,猜中後退出循環
p=$[$RANDOM % 1000]
a=0
num=0
echo "猜猜神秘數字是多少"
while [ $a -eq 0 ]
do
let num++
read -p "請輸入你猜的數字:" b
if [ $b -eq $p ];then
echo "恭喜,你猜對了!"
echo "您猜了$num 次"
let a++
elif [ $b -gt $p ];then
echo "你猜大了!"
elif [ $b -lt $p ];then
echo "你猜小了!"
fi
done
#ps:這隻是最簡單的示範,也可加一些其他語句進行優化
圖中的 echo “您猜了 s u m 次 " 改 為 e c h o " 您 猜 了 sum 次" 改為 echo "您猜了 sum次"改為echo"您猜了num 次” 手殘輸錯了
三、until循環語句
- 與while相反,重複測試某個條件,隻要條件不成立則反複執行。
1. 入門練習小例子:求1到100的和
#!/bin/bash
#
i=0
sum=0
until [ $i -gt 100 ]
do
sum=$[$sum+$i]
let i++
done
echo "1-100的和為:$sum"
四、結束循環
1. break 跳出單個循環
示例:
#!/bin/bash
for i in {1..5}
do
echo "外循環$i"
for j in {1..10}
do
if [ $j -eq 5 ]
then
break
fi
echo " 内循環$j"
done
done
~
ontinue 中止某次循環中的指令,但不會完全中斷
示例:
五、IFS字段分隔符
預設包含 空格,制表符,換行符
IFS=$' \t\n'
檢視指令:set | grep IFS
可用變量指派的方法 對此進行修改
例如:
FS.OLD=$IFS #先将原來的IFS賦給一個變量 做個備份
IFS=$'\n' # 更改為隻換行
...
IFS=$IFS.OLD #還原
六、轉義字元
echo -n 表示不換行輸出
echo -e 輸出轉義字元,将轉義後的内容輸出到螢幕上
常用的轉義字元如下:
\b
#轉義後相當于按倒退鍵(backspace),但前提是"\b"後面存在字元;
#"\b"表示後面字元替換前一個字元,"\b\b"表示替換前兩個字元。
\c #不換行輸出,在"\c"後面不存在字元的情況下,作用相當于 echo -n;
#但是當"\c"後面仍然存在字元時,"\c"後面的字元将不會被輸出。
\n
#換行,被輸出的字元從"\n"處開始另起一行。
\f
#換行,但是換行後的新行的開頭位置連接配接着上一行的行尾;
\v
#與\f相同;
\t
#表示插入tab,即橫向制表符;
\r
#光标移至行首,但不換行,相當于使用"\r"以後的字元覆寫"\r"之前同等長度的字元;
#但是當"\r"後面不存在任何字元時,"\r"前面的字元不會被覆寫
\\
#表示插入"\"本身;
示例:echo -n
示例:echo -e xxx\t