Linux Shell-《Linux Shell编程从入门到精通》第九章上机题9分析
一、起因
一个小段的脚本:

执行后的结果是

纳闷了,为啥呢
二、寻找原因
1、Shell中的自增自减与C语言类似:
图中表达式--a的结果是0;表达式b--的结果是1。其中a,b的值经过自减运算后均为0.
然后在命令行中对let命令进行测试,结果如下图:

前者执行失败,后者执行成功。
2、Shell 中关于&&和||的介绍文章网上比较多:
&& 运算符:
格式:command1 && command2
&&左边的命令(命令1)返回真(即返回0,成功被执行)后,&&右边的命令(命令2)才能够被执行;换句话说,“如果这个命令执行成功&&那么执行这个命令”。
语法格式如下:
command1 && command2 && command3 ...
- 命令之间使用 && 连接,实现逻辑与的功能。
- 只有在 && 左边的命令返回真(命令返回值 $? == 0),&& 右边的命令才会被执行。
- 只要有一个命令返回假(命令返回值 $? == 1),后面的命令就不会被执行。
|| 运算符:
格式:command1 || command2
||则与&&相反。如果||左边的命令(command1)未执行成功,那么就执行||右边的命令(command2);或者换句话说,“如果这个命令执行失败了||那么就执行这个命令。
-
命令之间使用 || 连接,实现逻辑或的功能。
-
只有在 || 左边的命令返回假(命令返回值 $? == 1),|| 右边的命令才会被执行。这和 c 语言中的逻辑或语法功能相同,即实现短路逻辑或操作。
-
只要有一个命令返回真(命令返回值 $? == 0),后面的命令就不会被执行。
参考所示:https://www.cnblogs.com/aaronLinux/p/8340281.html
三、结论

let --a 命令执行失败,返回1,执行||后面的命令;
let b-- 命令执行成功,返回0,执行&&后面的命令。
哪里还有问题呢?
预则立,不预则废

浙公网安备 33010602011771号