3 回答

TA貢獻(xiàn)2011條經(jīng)驗(yàn) 獲得超2個(gè)贊
shell編程中while true與while :確實(shí)等同。類(lèi)似于C語(yǔ)言中的 while (1),用于構(gòu)造無(wú)窮循環(huán)。
在shell編程中經(jīng)常用到循環(huán),常用的循環(huán)有for和while循環(huán)兩種。while循環(huán)默認(rèn)以行讀取文件,而for循環(huán)以空格讀取文件切分文件,本篇就結(jié)合現(xiàn)網(wǎng)的一些使用示例說(shuō)說(shuō)二者的用法和區(qū)別。
一、常用語(yǔ)法
1、for循環(huán)
for循環(huán)常用的語(yǔ)法結(jié)構(gòu)有如下幾種:
for 變量 in seq字符串for 變量 in `command` " "for 變量 in "$@"或“$*”for((賦值;條件;運(yùn)算語(yǔ)句))
2、while循環(huán)
while循環(huán)常用的語(yǔ)法結(jié)構(gòu)有如下幾種:
二、行讀取示例
這里以常見(jiàn)的df獲取磁盤(pán)信息為例,了解下使用for和while的幾種循環(huán)方法處理時(shí)的區(qū)別。先看下我寫(xiě)的腳本,內(nèi)容如下:
上面的腳本執(zhí)行時(shí)結(jié)果如下:
可以看到,只有后面兩種方法可以正常獲取到我們想要的數(shù)據(jù),前面兩種方法在處理時(shí)和我們想要的結(jié)果都不一樣。此示例得出的結(jié)果為:
1、while循環(huán): 以行讀取文件,默認(rèn)分隔符是空格或者Tab;
2、for循環(huán): 以空格讀取文件,也就是碰到空格,就開(kāi)始執(zhí)行循環(huán)體,所以需要以行讀取的話,就要把空格轉(zhuǎn)換成其他字符。
三、ssh連接與wait
這里還是以一個(gè)測(cè)試腳本為例:
此示例的結(jié)果這里不再輸出,具體可以使用該腳本ssh幾臺(tái)主機(jī)做個(gè)測(cè)試,測(cè)試后得到結(jié)果如下:
1、for循環(huán): 循環(huán)體在后臺(tái)執(zhí)行,等待循環(huán)體全部執(zhí)行結(jié)束,后面的命令接著執(zhí)行。
2、while循環(huán): wait沒(méi)起到作用,循環(huán)體在后臺(tái)執(zhí)行,后面的命令也同時(shí)在執(zhí)行。循環(huán)體內(nèi)有ssh、scp、sshpass的時(shí)候有執(zhí)行一次循環(huán)就退出的情況,解決該問(wèn)題方法有如下兩種:
a、使用ssh -n "command" ;b、將while循環(huán)內(nèi)加入null重定向,如 ssh "cmd" < /dev/null 將ssh 的輸入重定向輸入。
添加回答
舉報(bào)