Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/macos/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Bash else/if捕获退出状态_Bash_Macos_Shell_Unix - Fatal编程技术网

Bash else/if捕获退出状态

Bash else/if捕获退出状态,bash,macos,shell,unix,Bash,Macos,Shell,Unix,请帮助我修复以下脚本中的“elseif”行,这样它就可以捕获zero的退出状态并无误地继续,因为我不知道构造此脚本的正确语法 我需要从下面的命令中捕获零,但是在脚本的括号内 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>

请帮助我修复以下脚本中的“elseif”行,这样它就可以捕获zero的退出状态并无误地继续,因为我不知道构造此脚本的正确语法

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

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
提前感谢您的建议和想法


Dan

您可以使用
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

您可以使用
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

如果软件更新-l 2>&1 | grep restart>/dev/null;然后
将完成这项工作。您不需要使用
$?
变量走人工弯路。

如果softwareupdate-l 2>&1 | grep restart>/dev/null;然后
将完成这项工作。您不需要使用
$?
变量进行人工迂回。

只需将输出发送到临时文件,而不是尝试对命令的输出求值两次

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

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

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