在上一检测软件包是否安装的脚本中,有网友私信,下面这条命令到底是什么意思
rpm -q openssh --quiet && is_install=0 || is_install=1
文档中这样解释:
command1 && command2
command2 仅在 command1 返回码为0(也就是command1 执行成功)时才会被执行
command1 || command2
command2 仅在command1返回非0(也就是执行失败)时才会被执行
我们再来看网友问的这条命令
rpm -q openssh --quiet && is_install=0 || is_install=1
我们把这条命令分解如下,然后一一分析:
第一横框中 list command 1是一个与列表,根据文档解释,只有 rpm -q openssh --quiet 执行成功,那么 is_install=0 才会被执行。也就是说如果 检测到系统 安装有openssl 包,那么才会执行变量赋值is_install=0 。与列表执行成功。
实验1:
可以看到,不仅is_install=0被执行, rpm -q openssh --quiet && is_install=0 这个命令列表也执行成功了
当我们查询 一个不存在的包时,rpm -q nopackage --quiet 执行失败,
rpm -q nopackage --quiet && is_install=0 这个命令列表也执行失败($? = 1),而且 is_install=0 未被执行(echo $is_install 返回空)。
第三个命令列表 list command 2 ,实际上 list command 1 和 cmd5 组成的一个或列表。
也就是 list command1 失败时,才会行cmd5 ,也就是is_install =1
实验2:
实验 2的 list command 1执行失败,此时 或列表右边的is_install=1被执行
可见, is_install=0被执行,而is_install=1没有被执行