如果是,那么在Bash中

时间:2018-06-22 20:05:34

标签: bash

我正在尝试编写一个脚本,以检查RHEL服务器上是否安装了unzip。如果已安装,则应继续执行脚本,否则,将显示以下消息:

  

未安装解压缩包。

但是,我尝试谨慎一些,并认为每个服务器的版本可能有所不同,并且不确定是否可以使用通配符。以下是我要寻找的示例。

UNZIP='rpm -qq unzip'
If [$UNZIP = unzip*] then 'RUN COMMAND' else echo "Unzip is not installed."

1 个答案:

答案 0 :(得分:1)

您可以尝试以下方法:

unzip_package="$(rpm -qq unzip)"
if [[ $unzip_package =~ ^unzip.*$ ]]; then
   # ... run command
else
   echo "Unzip is not installed."
fi

以下是您的代码的一些注释:

1)要在subshel​​l中运行命令并在变量中捕获输出,有两种语法:

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