1.标准输入输出
指令执行过程中的数据传输
一般情况下,执行一个指令的结果是从键盘或者文件获取数据,经过处理之后输出到屏幕中。也就是standard output或者standard error output。
1.1 标准输出(STDOUT)和标准错误输出(STDERR)
数据流重定向就是指将标准输出和 标准错误输出输出到其他文件(Linux中设备也是文件)中去。
- 标准输出是指指令执行所回传的正确的信息
- 标准错误输出是指指令执行失败后,回传的错误信息
数据传送所用的特殊字符有:
- 标注输入(stdin):代码为0,使用< 或者 <<;
- 标注输出(stdout):代码为1,使用> 或者 >>;
- >以覆盖的方式输出
- >>以追加的方式输出
- 标注错误输出(stderr):代码为2,使用2> 或者 2>>;
- 2>以覆盖的方式输出
- 2>>以追加的方式输出
1.2 垃圾黑洞和其他特殊写法
-
/dev/null
可以销毁任何导向这个装置的信息。 - 需要把正确和错误输出到同一个文件,要用如下命令:
find /home -name .bashrc > list 2> list 错误,因为交叉写入文件可能导致次序混乱 find /home -name .bashrc > list 2>&1 正确 find /home -name .bashrc &> list 正确
1.3 标准输入:<和<<
-
< 将需要由键盘输入的数据,改为由文件输入。
如下代码可以把.bashrc内容输入,再输出到catfile文件中去:[root@iZwz9ayvrn26ptadymu9ymZ ~]# cat > catfile < ~/.bashrc [root@iZwz9ayvrn26ptadymu9ymZ ~]# ll catfile ~/.bashrc -rw-r--r-- 1 root root 176 Dec 27 15:05 catfile -rw-r--r--. 1 root root 176 Dec 29 2013 /root/.bashrc
<< 指出结束的输入字符,如下代码用eof作为输入的结束:
[root@iZwz9ayvrn26ptadymu9ymZ ~]# cat > catfile << "eof"
> This is a test.
> OK now stop
> eof
[root@iZwz9ayvrn26ptadymu9ymZ ~]# cat catfile
This is a test.
OK now stop
2. 指令执行控制
一次执行多条指令,需要用到指令执行控制。
包括连续下达(;),且(&&),或(||)。
2.1 cmd;cmd
不考虑指令相关性,顺序执行。
2.2 与(&&),或(||)
指令下达 | 说明 |
---|---|
cmd1 && cmd2 | cmd1执行完毕且正确($?=0)则cmd2执行 |
cmd1 || cmd2 | cmd1执行完毕且错误($?≠0),才执行cmd2 |
根据指令执行的回传值(可以用$?获取)决定指令的执行与否。
指令下达 | 说明 |
---|---|
cmd1 && cmd2 | cmd1执行完毕且正确($?=0)则cmd2执行 |
cmd1 || cmd2 | cmd1执行完毕且错误($?≠0),才执行cmd2 |