Shell脚本笔记(六)呈现数据
呈现数据
一、文件描述符
Linux系统将每个对象当做文件处理,这包括输入和输出进程。Linux用文件描述符来标识每个文件对象。每个进程最多可以有9个
文件描述符,bash shell保留了前三个文件描述符。
文件描述符 缩写 描述
0-----------------------------------STDIN--------------------------------------标准输入,对于终端界面来说就是键盘
1-----------------------------------STDOUT-----------------------------------标准输出,对于终端界面来说就是屏幕
2-----------------------------------STDERR-----------------------------------标准错误,对于终端界面来说就是屏幕
1.STDIN
在使用输入重定向符号(<)时, Linux会用重定向指定的文件来替换标准输入文件描述符。
它会读取文件并提取数据,就如同它是键盘上键入的。
2.STDOUT
在使用标准输出将数据导入文件时,如果遇到错误,错误信息是不会被导入到文件中去的。
3.STDERR
STDERR文件描述符代表shell的标准错误输出,脚本出错时错误信息都会发送到该位置。
重定向错误
ls -al badfile 2> err_log.txt
同时重定向错误和标准输出到不同文件
ls -al file1 file2 badfile 1> log.txt 2> err_log.txt
同时重定向错误和标准输出到同一个文件
ls -al file1 file2 badfile &> log.txt #注意相对于标准输出,bash shell 给与标准错误输出更高优先级
二、在脚本中重定向输出
1.临时重定向
将信息重定向到STDERR
echo "A error msg" >&2
2.永久重定向
exec 1> out.txt
三、在脚本中重定向输入
exec 0< in.txt
四、创建自己的重定向
1.创建输出文件描述符
#!/bin/bash exec 3> textout echo "My output" >&3
当然也可以使用追加
exec 3>> out
2.重定向文件描述符
#!/bin/bash exec 3>&1 exec 1>out.txt #注意此时3指向屏幕,1指向out.txt文件 echo "Going to 1" echo "Going to 3" >&3
3.创建输入文件描述符
exec 6<&0 exec 0<myfile
4.创建读写文件描述符
可以打开单个文件同时作为输入和输出
exec 3<> file
5.关闭文件描述符
一般情况下,如果创建了输入或输入文件描述符,shell会在脚本退出时自动关闭它们。但有时候我们需要手动关闭。
exec 3>&-
一旦关闭了文件描述符,就不能向它写入任何东西否则会报错。
6.阻止命令输出
ls -al /dev/null
用/dev/null清空文件中的数据
cat /dev/null > file
五、创建临时文件
1.创建本地临时文件
mktemp testfile #会将读写权限分配给owner,文件创建者为owner
#将文件名保存到变量中 fileName=$(mktemp testfile)
2.在/tmp目录创建临时文件
mktemp -t testfile
3.创建临时目录 -d
六、记录消息
tee命令相当于管道的一个T型接头。它将从STDIN过来的数据同时发往两处。一处是
STDOUT,另一处是tee命令行所指定的文件名
命令格式:tee filename
date | tee test.txt
-a:为追加