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