日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

config done shell_shell do...done $config

發(fā)布時(shí)間:2024/4/20 编程问答 53 豆豆
生活随笔 收集整理的這篇文章主要介紹了 config done shell_shell do...done $config 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

因?yàn)樽詈笥休斎胫囟ㄏ蚍?hào)

需要注意的是,config.ini文件中的標(biāo)題行也會(huì)被讀入。

man read,說(shuō)明中可以看到,如果讀成功的話,read返回讀取的字節(jié)數(shù);讀到文件的末尾則返回0。而對(duì)于while來(lái)講,條件為0表示為false,則退出循環(huán)。

有個(gè)需求:有三列信息文本,第一列IP,第二列用途,第三列備注,需要登錄每個(gè)IP執(zhí)行命令,不符合執(zhí)行命令結(jié)果的,打印出文本中這一行信息。

需求很簡(jiǎn)單,只要用一個(gè)循環(huán),能逐一登錄到每臺(tái)機(jī)器,執(zhí)行命令就可以了,剛開(kāi)始以為只要5分鐘就能搞定的事情,結(jié)果花費(fèi)了我一個(gè)上午的時(shí)間。主要耽擱在while循環(huán)里面嵌套了ssh。

首先說(shuō)說(shuō)for跟while讀行的區(qū)別,如都只有一列,結(jié)果是一樣的,但是如果多列,比如txt內(nèi)容這樣:

line1 line2 ?line2

line4 ?line5 ?line6

用for循環(huán):

for line in `cat txt`;

do echo $line;

done

顯示的結(jié)果:

line1

line2

lien3

line4

line5

line6

用while循環(huán):

cat txt|while read line;

do echo $line;

done

顯示的結(jié)果:

line1 line2 ?line2

line4 ?line5 ?line6

因此我的需求能用while來(lái)做,腳本如下:

cat txt|while read line

do

IP=`echo $line|awk '{print $1}'`

ssh -o ConnectTimeout=10 ${IP} "ls -l /home/admin|grep /"keyword/""

if [ ! $? == "0" ];then

echo "$line"

fi

done

但是問(wèn)題來(lái)了,執(zhí)行后,只做了一行就結(jié)束了,剛開(kāi)始還懷疑難道是if判斷有問(wèn)題,一個(gè)if結(jié)束就退出來(lái)了,于是在腳本的每一步都加了調(diào)試信息,結(jié)果很快發(fā) 現(xiàn)并不是if結(jié)束就退出來(lái)了。于是就逐個(gè)注釋掉調(diào)試,發(fā)現(xiàn)把ssh這句注釋了就能繼續(xù)下去,難道ssh哪里寫錯(cuò)了?原因不是這樣的。后來(lái)在網(wǎng)上查了資料, 發(fā)現(xiàn)這么一句話:while中使用重定向機(jī)制。也就是說(shuō)一開(kāi)始做while循環(huán),txt全部?jī)?nèi)容已經(jīng)被重定向給while循環(huán),而ssh語(yǔ)句正好會(huì)讀取輸入中的所有東西。于是自己調(diào)試一下:

cat txt|while read line

do

IP=`echo $line|awk '{print $1}'`

ssh ${IP} "cat"

done

顯示結(jié)果:

line4 ?line5 ?line6

也就是是說(shuō),最后一行已經(jīng)讀完了,循環(huán)也就結(jié)束了。

解決辦法:將ssh的輸入重定向輸入。

cat txt|while read line

do

IP=`echo $line|awk '{print $1}'`

ssh -o ConnectTimeout=10 ${IP} "ls -l /home/admin|grep /"keyword/""

if [ ! $? == "0" ];then

echo "$line"

fi

done

ssh最后加上

while read line

do

ehco "hello"

done < file

總結(jié)

以上是生活随笔為你收集整理的config done shell_shell do...done $config的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。