Shell 中的真与假
Posted Li-Yongjun
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Shell 中的真与假相关的知识,希望对你有一定的参考价值。
C 语言中的真与假
先看 C 语言,在 C 语言中,0 表示假,非 0 表示真,如下
#include <stdlib.h>
int main(int argc, char *argv[])
{
if (1)
printf("1 is true\\n");
else
printf("1 is false\\n");
if (0)
printf("0 is true\\n");
else
printf("0 is false\\n");
return EXIT_SUCCESS;
}
1 is true
0 is false
逻辑运算符 || 和 && 的特点
A || B ,如果 A 为真,B 就不会被执行了
A && B ,如果 A 为假,B 就不会被执行了
示例
#include <stdio.h>
#include <stdlib.h>
int main(int argc, char *argv[])
{
1 || printf("print me after 1 || \\n"); // 不打印
0 || printf("print me after 0 || \\n"); // 打印
1 && printf("print me after 1 && \\n"); // 打印
0 && printf("print me after 0 && \\n"); // 不打印
return EXIT_SUCCESS;
}
print me after 0 ||
print me after 1 &&
Shell 中的真与假
情况略微复杂,分为 if [ A ] 和 A || B 两种情况
一、先看 if [ A ] ,又分为两种情况
- 如果 A 是个数字,则 if [ A ] 始终为真,如下
if [ 1 ] ; then
echo "1 is true"
else
echo "1 is false"
fi
if [ 0 ] ; then
echo "0 is true"
else
echo "0 is false"
fi
1 is true
0 is true
- 如果 A 是个表达式,则用 A 的返回值也就是状态码,来决定 if [ A ] 的真假,不过当状态码为 0 时 if [ A ] 为真,当状态码为非 0 时 if [ A ] 为假,如下
if [ 5 -eq 5 ] ; then
echo "$? is true"
else
echo "$? is false"
fi
if [ 5 -eq 6 ] ; then
echo "$? is true"
else
echo "$? is false"
fi
0 is true
1 is false
二、再看 A || B
A 和 B 一般为命令语句,当 A 执行后返回的状态码为 0 时,说明 A 执行成功, 就不会再执行 B 了;当 A 执行后返回的状态码为非 0 时,说明 A 执行出错,继续执行 B 。状态码含义如下
状态码 | 描述 |
---|---|
0 | 命令成功结束 |
1 | 通用未知错误 |
2 | 误用 Shell 命令 |
126 | 命令不可执行 |
127 | 没找到命令 |
128 | 无效退出参数 |
128+n | Linux 中信号为 n 的严重错误 |
130 | 通过 Ctrl + C 退出 |
255* | 退出状态码越界 |
验证如下,true 命令执行后,会返回一个正确的结果,它本身就是干这个事情的。我们使用 $? 来直接打印这个正确的结果是几,答案是 0,这也进一步验证了状态码为 0 表示命令执行成功。false 命令同理。
$ help true
true: true
返回一个成功结果。
退出状态:
总是成功。
$ echo $?
0
$ help false
false: false
返回一个不成功的结果。
退出状态:
总是失败。
$ echo $?
1
实用示例
rm /home/test/a.out || exit 1
...
...
如果语句 rm /home/test/a.out
执行成功,就会返回 0,表示语句执行成功,这里的 0 为状态码,表示真,就不会执行 exit 1
了。
相反,如果语句 rm /home/test/a.out
执行失败,就会返回一个非 0 值来表示语句出错原因,状态码非 0 表示假,就会继续执行 exit 1
。
这种写法就达到了语句执行失败退出整个程序(脚本)的目的。
总结
在 C 语言中,0 表示假,非 0 表示真。
在 Shell 中,作为数字,任何值都是真;作为状态码,0 表示真,非 0 表示假。
以上是关于Shell 中的真与假的主要内容,如果未能解决你的问题,请参考以下文章