2
#!/bin/bash
# See if registry is set to expire updates
filename=hostnames
> test.log

PARAMETER=Updates
FILE=/etc/.properties

CODE=sudo if [ ! -f $FILE] && grep $PARAMETER $FILE; then echo "File found, parameter not found."
#CODE=grep $PARAMETER $FILE || sudo tee -a /etc/.properties <<< $PARAMETER

while read -r -a line
do
        hostname=${line//\"}
        echo $hostname":" >> test.log
        #ssh -n -t -t $hostname "$CODE" >> test.log
        echo $CODE;
done < "$filename"

exit

如果出现以下情况,我想在大约 50 台服务器上的 /etc/.properties 中设置“Updates 30”:

  • 文件存在(并非所有服务器都安装了软件)
  • 文件中尚未设置参数“更新”(例如,在多次运行的情况下)

到目前为止我有点困惑,因为我不确定这是否可以在 1 行 bash 代码中完成。脚本的其余部分工作正常。

4

1 回答 1

1

好的,这就是我认为适合您的解决方案。就像这篇文章中解释的那样http://www.unix.com/shell-programming-scripting/181221-bash-script-execute-command-remote-servers-using-ssh.html

调用包含要在远程服务器上执行的命令的脚本

代码脚本1:

while read -r -a line
do
    ssh ${line} "bash -s" < script2

done < "$filename"

要替换文本文件中的一行,可以使用 sed ( http://www.cyberciti.biz/faq/unix-linux-replace-string-words-in-many-files/ ) 代码脚本 2:

PARAMETER=Updates
FILE=/etc/.properties
NEWPARAMETER=Updates ###(What you want to write there)

if [ ! -f $FILE] && grep $PARAMETER $FILE; then exit

sed -i 's/$PARAMETER/$NEWPARAMETER/g' $FILE

因此,我不确定这是否涵盖了您的所有用例,如果有任何问题,我希望这对您有所帮助!

于 2013-06-12T15:49:10.197 回答