优秀的编程知识分享平台

网站首页 > 技术文章 正文

Shell编程:命令列表 && 和 ||

nanyue 2024-08-17 18:59:32 技术文章 13 ℃

在上一检测软件包是否安装的脚本中,有网友私信,下面这条命令到底是什么意思

rpm -q openssh --quiet && is_install=0 || is_install=1

这条命令用到了shell脚本中命令列表,老规矩,先看文档:


文档中这样解释:

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没有被执行

Tags:

猜你喜欢

最近发表
标签列表