我试图开始使用读取-r,但目前为止没有运气。 以下脚本(在下面添加)应该从/ etc/hosts中创建一个SSH服务器列表,然后执行该命令。我用它来进行简单的管理,添加用户等等。在bash脚本中的读命令
我通常使用sshservers=($(<serverlist.txt))
,但上周我通过Shellcheck运行了脚本,它说我应该用read -r
代替。 所以我补充说,但现在我的脚本在我运行时卡住了。
是否有人能够帮助我解决如何正确使用read -r
? (如果你有任何进一步的提示或注释,请告诉我,我仍然在学习Bash,正如你可能看到我的脚本那样)。
提前致谢!
#!/bin/bash
serverlist=/home/demo/serverlist.txt
: > "$serverlist"
sed -e '/^#/d' /etc/hosts | awk '{print $2}' >> "$serverlist"
sed -i -- '/^localhost/ d' "$serverlist"
#sshservers=($(<serverlist.txt))
sshservers=$(read serverlist)
for sshserver in "${sshservers[@]}"
do
ssh -t [email protected]"$sshserver" "hostname && sudo ls /root/"
done
echo "done"
编辑:/home/demo/serverlist.txt包含IP与下面的格式,不知道这是否有助于:
192.168.1.1
192.168.1.2
192.168.1.3
看一看[BashFAQ/001]( http://mywiki.wooledge.org/BashFAQ/001),“我如何逐行读取文件(数据流,变量)(和/或逐场)?” –
如果你有bash 4+,你可以使用mapfile'IFS = mapfile -t sshserver <“$ serverlist”' – 123
@BenjaminW。感谢您的帮助。我不知道如何将这完全添加到我的脚本。 我必须删除'for'行并将其设置为'IFS = read -r sshserver; do'? – Florius