【问题标题】:Bash else/if capture exit statusbash else/if 捕获退出状态
【发布时间】:2016-05-22 20:33:30
【问题描述】:

请帮助我修复以下脚本中的“elseif”行,以便它可以捕获零的退出状态并继续进行而不会出错,因为我不知道构造它的正确语法。

我需要从以下命令中捕获零,但要在脚本的括号内。

softwareupdate -l 2>&1 | grep restart

我的脚本:

#!/bin/bash
PATH=/bin:/usr/bin:/sbin:/usr/sbin export PATH 
SWLOG=/var/log/swupdate.log

softwareupdate -l 2>&1 | grep "No new software available."

if [ $? -eq 0 ]

then
  echo "No new software was deemed to be available"

elif [ $(softwareupdate -l 2>&1 | grep restart & $? = 0) ]

then
  echo "RESTART will be needed"

else
  echo "Updates needed, but not restart"

fi

提前感谢您的建议和想法!

【问题讨论】:

    标签: bash macos shell unix


    【解决方案1】:

    你可以使用grep -q,避免使用$?

    #!/bin/bash
    PATH=/bin:/usr/bin:/sbin:/usr/sbin export PATH 
    SWLOG=/var/log/swupdate.log
    
    if softwareupdate -l 2>&1 | grep -q "No new software available."
    then
      echo "No new software was deemed to be available"    
    elif softwareupdate -l 2>&1 | grep -q restart    
    then
      echo "RESTART will be needed"    
    else
      echo "Updates needed, but not restart"    
    fi
    

    【讨论】:

      【解决方案2】:

      不要尝试两次评估命令的输出,只需将输出发送到临时文件即可。

      softwareupdate -l > temp.out 2>&1
      grep "No new software available." temp.out > /dev/null
      if [ $? -eq 0 ]
      then
          echo "No new software was deemed to be available"
          exit
      fi
      grep "restart" temp.out > /dev/null
      if [ $? -eq 0 ]
      then
          echo "RESTART will be needed"
      else
          echo "Updates needed, but not restart"
      fi
      

      【讨论】:

        【解决方案3】:

        if softwareupdate -l 2>&1 | grep restart >/dev/null; then 将完成这项工作。使用$? 变量不需要人为绕道。

        【讨论】:

          猜你喜欢
          • 2010-11-16
          • 2018-06-24
          • 2012-10-15
          • 2015-02-03
          • 1970-01-01
          • 1970-01-01
          • 2018-12-11
          • 1970-01-01
          相关资源
          最近更新 更多