【发布时间】:2017-06-27 16:24:43
【问题描述】:
我为我的 bash shell 脚本的 if、elseif 条件添加了另一个条件。我是 shell 脚本的新手,如果我的 if 条件语法正确,尤其是“fi”实现,你们能否查看我的代码。非常感激。
if [ -f /etc/system-release ] && grep Amazon /etc/system-release > /dev/null; then
cd /tmp
sudo yum install -y https://s3.amazonaws.com/ec2-downloads-windows/SSMAgent/latest/linux_amd64/amazon-ssm-agent.rpm
else
# we're either RedHat or Ubuntu
DISTRIBUTOR=`lsb_release -is`
DISTRIBUTOR2=`lsb_release -cs`
if [ "trusty" == $DISTRIBUTOR2 ]; then
cd /tmp
wget https://s3.amazonaws.com/ec2-downloads-windows/SSMAgent/latest/debian_amd64/amazon-ssm-agent.deb
sudo dpkg -i amazon-ssm-agent.deb
sudo start amazon-ssm-agent
elif [ "RedHatEnterpriseServer" == $DISTRIBUTOR ]; then
cd /tmp
sudo yum install -y https://s3.amazonaws.com/ec2-downloads-windows/SSMAgent/latest/linux_amd64/amazon-ssm-agent.rpm
elif [ "xenial" == $DISTRIBUTOR2 ]; then
cd /tmp
wget https://s3.amazonaws.com/ec2-downloads-windows/SSMAgent/latest/debian_amd64/amazon-ssm-agent.deb
sudo dpkg -i amazon-ssm-agent.deb
sudo systemctl enable amazon-ssm-agent
fi
fi
sleep 10
【问题讨论】:
-
有问题吗?
-
你应该在
[ ... ]中的变量两边加上双引号,像这样:if [ "trusty" == "$DISTRIBUTOR2" ] -
在
[ ]中使用==实际上不是完全有效的语法。符合 POSIX 的字符串比较运算符是=。 -
也就是说,代码审查不是我们在这里所做的——实际上有一个 单独的 站点,Code Review SE。包含代码的问题应围绕特定错误,并删除与该错误无关的任何内容。请参阅有关创建 minimal reproducible example 的帮助中心文档。
-
当我执行脚本时,它说“脚本以非零退出状态退出:1”它没有给我任何具体的错误消息。任何提示