很多 Linux 命令其实就是一个C语言程序,熟悉C语言的读者都知道,main() 函数的最后都有一个if 语句的判断条件,从本质上讲,判断的就是命令的退出状态。return 0
,如果程序想在中间退出,还可以使用exit 0
,这其实就是C语言程序的退出状态。当有其它程序调用这个程序时,就可以捕获这个退出状态。
有编程经验的读者请注意,Shell 的这个部分与你所熟悉的其它编程语言正好相反:在C语言、C++、Java、Python 中,0 表示“假”,其它值表示“真”。在 Shell 中,有多种方式取得命令的退出状态,其中 $? 是最常见的一种。上节《Shell if else》中使用了 (()) 进行数学计算,我们不妨来看一下它的退出状态。请看下面的代码:
#!/bin/bash read a read b (( $a == $b )); echo "退出状态:"$?运行结果1:
运算符 | 使用格式 | 说明 |
---|---|---|
&& | expression1 && expression2 |
逻辑与运算符,当 expression1 和 expression2 同时成立时,整个表达式才成立。 如果检测到 expression1 的退出状态为 0,就不会再检测 expression2 了,因为不管 expression2 的退出状态是什么,整个表达式必然都是不成立的,检测了也是多此一举。 |
|| | expression1 || expression2 |
逻辑或运算符,expression1 和 expression2 两个表达式中只要有一个成立,整个表达式就成立。 如果检测到 expression1 的退出状态为 1,就不会再检测 expression2 了,因为不管 expression2 的退出状态是什么,整个表达式必然都是成立的,检测了也是多此一举。 |
! | !expression | 逻辑非运算符,相当于“取反”的效果。如果 expression 成立,那么整个表达式就不成立;如果 expression 不成立,那么整个表达式就成立。 |
#!/bin/bash read filename read url if test -w $filename && test -n $url then echo $url > $filename echo "写入成功" else echo "写入失败" fi在 Shell 脚本文件所在的目录新建一个文本文件并命名为 urls.txt,然后运行 Shell 脚本,运行结果为:
-w
选项用来检测文件是否存在并且可写,-n
选项用来检测字符串是否非空。下节《Shell test》中将会详细讲解。>
表示重定向,默认情况下,echo 向控制台输出,这里我们将输出结果重定向到文件。Copyright © 广州京杭网络科技有限公司 2005-2025 版权所有 粤ICP备16019765号
广州京杭网络科技有限公司 版权所有