天天看點

shell 循環語句和轉義字元一、for循環語句二、while循環語句三、until循環語句四、結束循環五、IFS字段分隔符六、轉義字元

文章目錄

  • 一、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
           
shell 循環語句和轉義字元一、for循環語句二、while循環語句三、until循環語句四、結束循環五、IFS字段分隔符六、轉義字元

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
           
shell 循環語句和轉義字元一、for循環語句二、while循環語句三、until循環語句四、結束循環五、IFS字段分隔符六、轉義字元

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
           
shell 循環語句和轉義字元一、for循環語句二、while循環語句三、until循環語句四、結束循環五、IFS字段分隔符六、轉義字元
shell 循環語句和轉義字元一、for循環語句二、while循環語句三、until循環語句四、結束循環五、IFS字段分隔符六、轉義字元

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 
           
shell 循環語句和轉義字元一、for循環語句二、while循環語句三、until循環語句四、結束循環五、IFS字段分隔符六、轉義字元

二、while循環語句

  • 根據特定條件反複執行一個指令序列,直到不滿足條件為止。
  • 編寫時可能會出現死循環,要避免這種情況發生
  • true(真)和false(假)為特殊條件測試操作,也可以在if語句的條件測試中使用。
  • true作為條件時,表示條件永遠成立,無限執行,也就是死循環,需要強制終止
  • false作為條件時,表示條件不成立,不執行指令序列
    shell 循環語句和轉義字元一、for循環語句二、while循環語句三、until循環語句四、結束循環五、IFS字段分隔符六、轉義字元

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循環做
    shell 循環語句和轉義字元一、for循環語句二、while循環語句三、until循環語句四、結束循環五、IFS字段分隔符六、轉義字元

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:這隻是最簡單的示範,也可加一些其他語句進行優化

           
shell 循環語句和轉義字元一、for循環語句二、while循環語句三、until循環語句四、結束循環五、IFS字段分隔符六、轉義字元

圖中的 echo “您猜了 s u m 次 " 改 為 e c h o " 您 猜 了 sum 次" 改為 echo "您猜了 sum次"改為echo"您猜了num 次” 手殘輸錯了

shell 循環語句和轉義字元一、for循環語句二、while循環語句三、until循環語句四、結束循環五、IFS字段分隔符六、轉義字元

三、until循環語句

  • 與while相反,重複測試某個條件,隻要條件不成立則反複執行。
shell 循環語句和轉義字元一、for循環語句二、while循環語句三、until循環語句四、結束循環五、IFS字段分隔符六、轉義字元

1. 入門練習小例子:求1到100的和

#!/bin/bash
#
i=0
sum=0
until [ $i -gt 100 ]
do
  sum=$[$sum+$i]
  let i++
done
echo "1-100的和為:$sum"
           
shell 循環語句和轉義字元一、for循環語句二、while循環語句三、until循環語句四、結束循環五、IFS字段分隔符六、轉義字元

四、結束循環

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
~    
           
shell 循環語句和轉義字元一、for循環語句二、while循環語句三、until循環語句四、結束循環五、IFS字段分隔符六、轉義字元
shell 循環語句和轉義字元一、for循環語句二、while循環語句三、until循環語句四、結束循環五、IFS字段分隔符六、轉義字元

ontinue 中止某次循環中的指令,但不會完全中斷

示例:

shell 循環語句和轉義字元一、for循環語句二、while循環語句三、until循環語句四、結束循環五、IFS字段分隔符六、轉義字元
shell 循環語句和轉義字元一、for循環語句二、while循環語句三、until循環語句四、結束循環五、IFS字段分隔符六、轉義字元

五、IFS字段分隔符

預設包含 空格,制表符,換行符
IFS=$' \t\n'
檢視指令:set | grep IFS
           
shell 循環語句和轉義字元一、for循環語句二、while循環語句三、until循環語句四、結束循環五、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

shell 循環語句和轉義字元一、for循環語句二、while循環語句三、until循環語句四、結束循環五、IFS字段分隔符六、轉義字元
shell 循環語句和轉義字元一、for循環語句二、while循環語句三、until循環語句四、結束循環五、IFS字段分隔符六、轉義字元

示例:echo -e xxx\t

shell 循環語句和轉義字元一、for循環語句二、while循環語句三、until循環語句四、結束循環五、IFS字段分隔符六、轉義字元
shell 循環語句和轉義字元一、for循環語句二、while循環語句三、until循環語句四、結束循環五、IFS字段分隔符六、轉義字元

繼續閱讀