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

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 运维知识 > linux >内容正文

linux

linux sh脚本 while,Linux shell脚本使用while循环执行ssh的注意事项

發(fā)布時間:2025/3/20 linux 27 豆豆
生活随笔 收集整理的這篇文章主要介紹了 linux sh脚本 while,Linux shell脚本使用while循环执行ssh的注意事项 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

原標(biāo)題:Linux shell腳本使用while循環(huán)執(zhí)行ssh的注意事項

如果要使用ssh批量登錄到其它系統(tǒng)上操作時,我們會采用循環(huán)的方式去處理,那么這里存在一個巨大坑,你必須要小心了。

一、場景還原:

我現(xiàn)在是想用一個腳本獲取一定列表服務(wù)器的運行時間,首先我建立一個名字為ip.txt的IP列表(一個IP一行),再建好密鑰實現(xiàn)不用密碼直接登錄。然后寫腳本如下:

#!/bin/bash

whileread ips;

do

echo $ips;

done< ip.txt

腳本實現(xiàn)了逐行讀取列表中的IP,但是:

#!/bin/bash

whileread ips;

do

echo $ips;

upt=`ssh root@$ips "uptime"`;

echo $upt;

done< ip.txt

腳本只對第一個IP做了檢測,就直接跳出來了。

二、問題分析:

while使用重定向機制,ip.txt文件中的信息都已經(jīng)讀入并重定向給了整個while語句,所以當(dāng)我們在while循環(huán)中再一次調(diào)用read語句,就會讀取到下一條記錄。問題就出在這里,ssh語句正好回讀取輸入中的所有東西。為了禁止ssh讀所有東西增加一個< /dev/null,將ssh 的輸入重定向輸入。

三、解決策略:

1、使用for循環(huán)代表while,因為for沒有一次把文件內(nèi)容緩存獲取過來,代碼段修改如下:

forips in`cat ip.txt`; do

echo ${ips};

upt=`ssh root@${ips} uptime`;

echo $upt;

done

2、若堅持使用while循環(huán),那么需要對ssh增加-n參數(shù),為什么增加了-n參數(shù)也可以解決問題呢?通過man ssh查看-n參數(shù)的說明:

Redirects stdin from /dev/null (actually, prevents reading from stdin)

這就和

修改后的代碼如下:

#!/bin/bash

whileread ips;

do

echo $ips;

upt=`ssh -n root@$ips "uptime"`;

echo $upt;

done< ip.txt返回搜狐,查看更多

責(zé)任編輯:

總結(jié)

以上是生活随笔為你收集整理的linux sh脚本 while,Linux shell脚本使用while循环执行ssh的注意事项的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

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