[Shell]Bash基本功能:输入输出重定向,shellbash


/*-----------------------------------------------------------------------------------------------

  @黑眼诗人 <www.chenwei.ws>

-----------------------------------------------------------------------------------------------*/

输入输出重定向的作用:

  输出重定向就是把命令的执行结果保存到文件,便于查看。

  输入重定向就是把原先由键盘的输入改为由文件输入。

 

先了解一下标准输入输出:

[  设备  ][  设备文件名  ][ 文件描述符 ][  类型  ]

  键盘      /dev/stdin         0     标准输入

  显示器     /dev/stdout     1     标准输出

  显示器     /dev/stderr    2     标准错误输出

 

几个概念(> 表示覆盖,>>表示追加

[ 正确输出重定向 ]

  命令 > 文件    # 以覆盖的方式,将命令的正确输出,输出到文件或设备中

  命令 >> 文件    # 以追加的方式,将命令的正确输出,输出到文件或设备中

 

[ 错误输出重定向 ]

  错误命令 2> 文件  # 以覆盖方式,将命令的错误输出,输出到指定文件或设备中

  错误命令 2>> 文件  # 以追加的方式,将命令的错误输出,输出到指定文件或设备中

  

  

  (注意:要保存错误信息,必须在单大于号或双大于号前加 2 ,中间无空格)

 

[ 正确输出和错误输出同时保存]

  1. 命令 > 文件 2>&1  #以覆盖方式,将正确和错误输出都保存到同一文件中

  2. 命令 >> 文件 2>&1  #以追加的方式,将正确和错误输出都保存到同一文件中

  3. 命令 &> 文件     #等同于第一条(&作用等同于2>&1)

  4. 命令 &>> 文件     #等同于第二条

  5. 命令 >> 文件A 2>> 文件B   #把正确的输出追加到文件A,把错误的输出追加到文件2中(定时备份的时候很有用)

 

ls &> /dev/null    #将执行结果保存到/dev/null(不存在的设备,即将无意义的结果清除)

 

输入重定向:

[ wc用于统计键盘输入 ]

wc [-c] 文件名  #统计字节数

wc [-w] 文件名  #统计单词数

wc [-l] 文件名   #统计行数

(输入wc后,输入的其它字符将被统计,ctrl+d结束)

(4行,7个单词,40个字符)

 

[ 用wc统计文件:单小于号 ]


SHELL编程 输出重定向

grep -v $bbb xxx.txt | cat >xxx.txt

在管道前后对同一个文件操作很危险。这样同时有两个程序对同一个文件读写,会产生竞争。最后的结果不好确定。最好分开处理。

rep -v $... xxx.txt >xxx.txt 这样做也不好。通过重定向后也会发生对同一个文件同时读写的情况。 但至少是同一个程序来控制(如果不算shell)。grep可能已经考虑过这样的情况,或者巧合(处理时先读,再写), 所以结果正确。但同其他程序的配合,情况就更复杂了,很可能出现问题。
具体要看grep,shell和cat代码。

但总体上,不建议这样做。这样做是极危险的行为。最好用一个备份文件,避免同时对一个文件读写操作。
 

Bash输出重定向及制表问题

没太清楚意思。。。
declare -a folder=(folder1 folder2);
for x in ${folder[*]}; do
find "$x" -mtime -1 -type f -exec \
awk '
function fun() { printf "output" }
NR==1
{ "yourscript "FILENAME | getline var; print var;
print $0"\t"fun()
' {} \;
done
 

相关内容