关于shell命令的扩展
目录
一、逻辑运算符
1. &&(AND)
2. ||(OR)
3. 组合使用:A && B || C
二、输出与重定向
1. echo 输出
2. 标准文件描述符(FD)
3. 重定向操作符
4. 同时重定向 stdout 和 stderr
5. 丢弃输出
三、管道 |
四、自定义文件描述符(进阶)
五、小结速查
一、逻辑运算符
1. &&
(AND)
-
含义:只有左侧命令成功(退出码为 0)时才执行右侧命令。
-
示例:
true && echo "成功" # 输出“成功” false && echo "失败" # 无输出
2. ||
(OR)
-
含义:只有左侧命令失败(退出码非 0)时才执行右侧命令。
-
示例:
false || echo "失败" # 输出“失败” true || echo "成功" # 无输出
3. 组合使用:A && B || C
-
等价于:
(A && B) || C
-
示例:
false && echo yes || echo fallback # 输出 fallback
二、输出与重定向
1. echo
输出
-
默认输出到
stdout
(标准输出) -
输出到
stderr
(标准错误):echo "错误信息" >&2
2. 标准文件描述符(FD)
-
0
:stdin(标准输入) -
1
:stdout(标准输出) -
2
:stderr(标准错误)
3. 重定向操作符
-
>
:覆盖写入文件 -
>>
:追加写入文件 -
2>
:重定向 stderr(覆盖) -
2>>
:重定向 stderr(追加) -
4. 同时重定向 stdout 和 stderr
-
POSIX 写法:
command >out.txt 2>&1
-
Bash 简写:
command &>out.txt
5. 丢弃输出
-
丢弃 stdout:
command > /dev/null
-
丢弃 stderr:
command 2> /dev/null
-
同时丢弃:
command > /dev/null 2>&1 # 或 command &> /dev/null
三、管道 |
-
默认:只传递
stdout
,不传递stderr
-
传递两者:
command 2>&1 | grep something # 或(Bash) command |& grep something
四、自定义文件描述符(进阶)
-
打开 FD 3 并写入:
exec 3>mylog.txt echo "hello" >&3 exec 3>&- # 关闭
五、小结速查
操作 | 说明 | |
---|---|---|
A && B | A 成功才执行 B | |
A || B | A 失败才执行 B | |
> file | 覆盖写入 stdout | |
>> file | 追加写入 stdout | |
2> file | 覆盖写入 stderr | |
2>> file | 追加写入 stderr | |
2>&1 | 将 stderr 重定向到 stdout | |
&> file | 同时重定向 stdout 和 stderr(Bash) | |
> /dev/null | 丢弃 stdout | |
2> /dev/null | 丢弃 stderr | |
| | 管道,只传递 stdout | |
2>&1 | 或|& (bash) | 管道传递 stdout 和 stderr |