【问题标题】:Is the Syntax for the Bash Script right for an if elif statementBash 脚本的语法是否适用于 if elif 语句
【发布时间】: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”它没有给我任何具体的错误消息。任何提示

标签: bash shell


【解决方案1】:

看起来基本没问题,但是https://www.shellcheck.net/ 有几个你可能应该解决的 cmets。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-05-26
    • 2019-08-15
    • 1970-01-01
    • 1970-01-01
    • 2012-11-19
    • 2015-06-21
    • 1970-01-01
    相关资源
    最近更新 更多