我正在尝试编写一个脚本,以检查RHEL服务器上是否安装了unzip
。如果已安装,则应继续执行脚本,否则,将显示以下消息:
未安装解压缩包。
但是,我尝试谨慎一些,并认为每个服务器的版本可能有所不同,并且不确定是否可以使用通配符。以下是我要寻找的示例。
UNZIP='rpm -qq unzip'
If [$UNZIP = unzip*] then 'RUN COMMAND' else echo "Unzip is not installed."
答案 0 :(得分:1)
您可以尝试以下方法:
unzip_package="$(rpm -qq unzip)"
if [[ $unzip_package =~ ^unzip.*$ ]]; then
# ... run command
else
echo "Unzip is not installed."
fi
以下是您的代码的一些注释:
1)要在subshell中运行命令并在变量中捕获输出,有两种语法:
var="$(command)"
var=`command`
但不是:
var='command'
2)您在测试中的方括号内需要有空格:
[ -z "$unzip" ]
:[
是test
命令的别名(或具有相同行为的内置bash)。使用此语法时,还应该用双引号保护操作数。
[[ -z $unzip ]]
:自KSH88起可用(在我的内存中),并且允许使用=~
运算符从bash 4+开始测试更强大的功能,例如测试regexp。
您应该看到this reminder以获得更多详细信息。
3)您错过了fi
来关闭if
语句
4)注意以下情况:if
而不是If
5)您还会错过倍数分号:
if <cmd1>; then <cmd2>; else <cmd3>; fi
或者:
if ...; then
# do some stufs
else
# ...
fi
或者:
if ....
then
# do some stufs
else
# ...
fi
最后,您确实应该了解更多有关Shell语法和语句的基础知识。对于Bash来说,这真的是一个很好的guide。