IO重定向
程序:指令+数据
程序:IO
可用于输入的设备: 文件
键盘设备, 文件系统上的常规文件,网卡等
可用于输出的设备: 文件
显示器, 文件系统上的常规文件,网卡等
程序的数据流有三种
输入的数据流: <-- 标准输入(stdin), 如键盘
输出的数据流: --> 标准输出(stdout), 如显示器
错误输出流: --> 错误输出(stderr), 显示器
fd: file descriptor, 文件描述符
标准输入:0
标准输出:1
错误输出:2
IO重定向:
输出重定向: >
特性: 覆盖输出
例如:
输出重定向: >>
例如:
特性: 追加输出
# set -C (大写C)
禁止覆盖输出重定向至已存在的文件
此时可使用强制覆盖重定向: >|
例如:开启此功能后,>已经不能覆盖已经存在的文件了,file1覆盖file2文件时提示错误,不过我们可以用>|强制覆盖, >>输出重定向不受影响,同时file1覆盖file3也不受影响,因为file3文件是不存在,此命令只针对已存在文件
# set+C
关闭上述特性
例如:关闭后,file1文件覆盖file2文件就不会报错了
错误输出重定向: 2>, 2>>
例如:file4文件不存在,我们用>把file4覆盖file2时出现错误,我们用2>输出时,就正常了,我们再看file2文件内容,错误提示的内容已经存在file2文件里了,意思就是把错误的信息也输出到file2文件里,2>>就是就是追加的意思,错误输出重定向,我们2>>file4在追加一次,file2文件就有两个错误信息了
合并正常输出流和错误输出流
&>, &>>
例如:意思是把不管正确的还是错误的输出都输入到文件里,file1是存在的,覆盖到file2没有问题,file4文件不存在的,也可以覆盖到file2文件里,同时错误信息也报存在file2文件里了.
&>> 就是追加的意思了,不删除原来的数据,不管正常的输出还是错误的输出都追加到文件里
cat file1 > file2 2>&1 与&>同义
cat file1 >> file2 2>&1 与&>>同义
特殊设备: /dev/null
例如: /dev/null是一个黑洞,不管什么数据输入到里面都会消失,如果写脚本有什么数据不需要的都可以丢到这里面,我们把file1文件复制到/dev/null里,cat看的时候什么数据都没有
输入重定向: <
例如: 把文件内容输出到屏幕,cat就算不加< 也是有这个功能的
tr命令:
命令格式:tr [OPTION]... SET1 [SET2]
把输入的数据当中的字符,凡是在SET1定义范围内出现的,通通对位转换为SET2出现的字符
例如:意思把[a-z]都输出为[A-Z]也就是变成大写,第一行和第三行都是我输入的小写字母,第二行和第四行都是按enter键就会自动转换成大写字母,对本身是大写字母的字符不做转换
用法1:
列: tr [a-z] [A-Z] < file1
意思是把file1所有小写改成大写字母并输出到屏幕
用法2:
列: tr -d [if] < file1
意思是把file1显示出来包含if的全部删除掉,不会删除源文件数据
<< 这个就不是追加的意思了
cat << EOF 可以持续在屏幕输入数据,直到输入EOF就会自动退出来,同时把你刚才输入的数据一次性打印出来,这里的EOF是直接随意定义,可以是随意的单词.退出就是自己定义的这个单词
cat > file1 << EOP
例如: 也可以把在屏幕上打好的字符输入到指定的文件中