Linux 之 shell script -- loop(固定循環(huán))

1. for ... do ... done (固定循環(huán))

1.1 認(rèn)識 for ... do ... done

昨天剛學(xué)過while,until的循環(huán)方式 --> Linux 之 shell script -- loop(不定循環(huán))
:符合循環(huán)條件便可以無限得循環(huán)執(zhí)行指定的“程序段”,我們便稱為不定循環(huán)。今天學(xué)習(xí)與不定循環(huán)相對應(yīng)的for循環(huán),這種語法則是已經(jīng)知道要進(jìn)行幾次循環(huán)的狀態(tài)。

  • for ... do ... done 的語法結(jié)構(gòu):
    for ... do ... done 固定循環(huán)

1.2 for ... do ... done 實(shí)例

1.2.1 實(shí)例一

  • 撰寫要求:
    假設(shè)我有三種動物,分別是dog,cat,elephant三種,我想每一行都輸出 “There are dogs...”之類的字樣
    ~~通過它來看一下for循環(huán)是怎么用的~~
    vi show_animal.sh 輸入如下代碼:
#!/bin/bash
for animal in dog cat elephant # var=animal;con1=dog;con2=cat;con3=elephant
do
    echo "There are ${animal}s..."# ${animal}在第一行就被定義了
done

最后的展示結(jié)果??,是不是特別簡潔方便!


show_animal.sh

1.2.2 實(shí)例二

這是個(gè)很有用的小實(shí)例哦~~

  • 撰寫要求
    首先,通過 管線命令cut 擷取/etc/passwd中的 賬號名稱
    然后,用 id命令 --依次檢查使用者的 標(biāo)識符特殊參數(shù)
#!/bin/bash
users=$(cut -d ':' -f1 /etc/passwd) #擷取賬號名稱:擷取/etc/passwd文本中以“:”為分隔符的第一列賦值給變量${users}
for username in ${users} # 這里定義變量${username}為${users}的任一值
do
    id ${username} #查詢${users}的標(biāo)識符與特殊參數(shù)
done

1.2.3 實(shí)例三

ping是判斷網(wǎng)絡(luò)狀態(tài)的指令,實(shí)例三中這串指令執(zhí)行后可以顯示出192.168.1.1~192.168.1.100共100部主機(jī)目前是否能與你的機(jī)器連通,貓毛不太懂網(wǎng)域是什么東西,但是搞懂代碼的含義確實(shí)可以幫助我學(xué)習(xí)和理解shell~
vi pingip.sh 寫入如下代碼內(nèi)容:

#!/bin/bash
network="192.168.1" #先定義一個(gè)網(wǎng)域的前面部分
for sitenu in $(seq 1 100) #seq為sequence(連續(xù))的縮寫之意;${1..100}也是可以的
do
    #底下的程序在取得ping 的回傳值是正確的還是失敗的!
    ping -c 1 -w 1 ${network}.${sitenu} &> /dev/null && result=0 || result=1
    #開始顯示結(jié)果是正確的啟動(UP)還是錯(cuò)誤的沒有連通(DOWN)
    if [ "${result}" == 0 ]; then
        echo "Server ${network}.${sitenu} is UP."
    else
        echo "Server ${network}.${sitenu} is DOWN."
    fi
done

1.2.4 實(shí)例四

練習(xí)判斷式+循環(huán)功能(讓用戶輸入某個(gè)目錄文件名,然后找出目錄內(nèi)的文件名權(quán)限)
vi dir_perm.sh 寫入如下代碼:

#!/bin/bash
# 1.先看看這個(gè)目錄是否存在
read -p "Please input a directory" dir
if [ "${dir}" == "" -o ! -d "${dir}" ]; then
    echo "The ${dir} is NOT exist in your system."
    exit 1
fi

# 2. 開始測試文件
filelist=$(ls ${dir}) #列出所有在該目錄下的文件名
for filename in ${filelist}
do
    perm=""
    test -r "${dir}/${filename}" && perm="${prem} readable"
    test -w "${dir}/${filename}" && perm="${perm} writable"
    test -x "${dir}/${filename}" && perm="${perm} executable"
    echo "The file ${dir}/${filename}'s permission is ${perm}"
done

1.3 for ... do ... done 的數(shù)值處理

  • 語法結(jié)構(gòu)


    for do done 的另一種寫法

    這種語法適合于數(shù)值方式的運(yùn)算當(dāng)中,在for后面的括號內(nèi)的三串內(nèi)容意義為:

  • 初始值:某個(gè)變量在循環(huán)當(dāng)中的起始值,直接以類似 i=1 設(shè)定好
  • 限制值:當(dāng)變量的值在這個(gè)限制值的范圍內(nèi),就繼續(xù)進(jìn)行循環(huán)。例如i<=100
  • 執(zhí)行步階:每作一次循環(huán)時(shí),變量的變化量。例如i=i+1(如果每次增加1,可以使用i++的方式)
    計(jì)算1+2+3 ... +100的總和
    vi cal_1_100-2.sh
#!/bin/bash
read -p "Please input a number, I will count for 1+2+...+your_input:" nu

s=0
for (( i=1; i<=${nu}; i=i+1 ))
do
    s=$((${s}+${i}))
done
echo "The result of '1+2+3+...+${nu}' is ==> ${s}"
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容