我正在尝试将命令输出存储到脚本中的变量,并根据存储在变量中的输出打印结果。
例如,在此脚本中,我尝试打印从lab.txt文件中读取的少数系统上安装的代理的状态。如果状态与" isrunning"匹配,则打印出"已安装代理"。
~]# cat lab.txt
192.168.1.1
192.168.1.2
这是脚本 -
#!/bin/bash
while read host; do
status=$(ssh -n root@$host /opt/agent/bin/agent.sh status | awk 'NR==1{print $3 $4}')
if [ $status != isrunning ]
then
echo "agent is not installed"
else
echo "agent is installed"
fi
done < lab.txt
这里的问题是,如果命令返回错误,因为系统192.168.1.2上没有/ opt / agent目录,则不会安装&#34;代理&#34;消息未打印。这可能有什么问题?
~]# ./script.sh
root@192.168.1.1:
agent is installed
root@192.168.1.2:
bash: /opt/agent/bin/agent.sh: No such file or directory
./script.sh: line 5: [: !=: unary operator expected
agent is installed
答案 0 :(得分:1)
$status
未初始化,因此不满足条件[ status != isrunning ]
。类似的东西:
if [ "$status" != isrunning ]
应该解决这个问题并摆脱unary operator expected
的错误。