bash脚本:输入输出重定向、管道命令

输入/输出重定向(I/O重定向):

重定向:

默认:

程序的默认输入设备:

标准输入(stdin)。通常是键盘。设备描述符为0。


程序的的默认输出设备:

标准输出(stdout)。只输出成功信息。通常是显示器(mintor)。设备描述符为1。


程序的默认错误信息输出设备:

标准错误输出(stderr)。通常是显示器(mintor)。设备描述符为2。


输出重定向:

#COMMAND > FILE 默认是覆盖输出。

使用#set -C 可以关闭覆盖重定向,使用#set +C来关闭此功能。但是只对当前shell有效。


或者使用>|来强行覆盖。


例如:

#ls /etc > /tmp/etc/out

#ls /var > tmp/etc/out

#ls /var >| /tmp/etc/out

#date > /dev/null 


#COMMAND >> FILE 追加输入。

例如:

#ls /home >> /tmp/etc/out


#COMMAND >| FLIE 将命令的执行结果送至指定的文件中,若文件已经存在,则覆盖。 

例如: 

#ls -lg >| lee.dat 将执行"ls -lg"命令的结果覆盖写入文件 lee.dat 中。 


#COMMAND >& FILE 将命令执行时屏幕上所产生的任何信息写入指定的文件中。

例如: 

#cc lee.c >& lee.dat 将编译 lee.c 文件时所产生的任何信息写入文件 lee.dat 中。


#COMMAND >> FILE 将命令执行的结果附加到指定的文件中。 

例如: 

#ls -lag >> lee.dat 将执行 "ls -lag" 命令的结果附加到文件 lee.dat 中。


输入重定向:

#COMMAND < FILE

例如:

#tr 'a-z' 'A-Z' < /etc/passwd 将/etc/passwd中小写改成大写。


#COMMAND << EOF 

EOF(End Of FILE) ,添加文件结尾标识,输入完成后输入EOF字符串表示文件结束。EOF内容可以自定义。Here document。


例如:

#cat >>/tmp/test3.out << TTCC  将输入的内容保存为test3.out。

EOF字符串此时自定义为TTCC,输入完成后输入TTCC表示文件结束。

the first.

the second.

the third.

TTCC


#cat /tmp/test3/out

the first.

the second.

the third.

例如:

#nano sec.sh

cat << EOF

what do you want to eat

1.shaoji

2.longxia

3.dazhaxie

4.gun

EOF


#bash sec.sh

1.shaoji

2.longxia

3.dazhaxie

4.gun

错误重定向:

只输出错误的信息。


#COMMAND 2 > FILE 


#COMMAND 2 >> FILE


#COMMAND > FILE 2 >& 1 正常和错误输出都重定向。

#COMMAND > FILE1 2 > FILE2 错误的输出到FILE2,正确的输出到FILE1。


#COMMAND >& FILE 正常和错误输出都重定向

例如:

#lls /etc 2> /tmp/hell.out

#cat /tmp/hell.out




管道:

只传递正确的信息。

#COMMAND1|COMMAND2|COMMAND3 ...


例如:

#echo "the first line." | tr 'a-z' 'A-Z'

THE FIRST LINE.


#echo 'redhat' |paaswd -stdin test 将test的密码设定为redhat,通过标准输入方式定义。


#file `ls /var/log` |cut -d: -f2|tr -d ' '  清除输出的空格


#file `ls /var/log` |cut -d: -f2|tr -d ' '|uniq 去重


#file `ls /var/log` |cut -d: -f2|tr -d ' '|sort -u 去重。


#file `ls /var/log` |cut -d: -f2|tr -d ' '|sort -u


#ll /tmp| wc -l 列出/tmp下的文件个数。


#wc -l /etc/paaswd |cut -d ' ' f1 只显示/etc/passwd文件的行数。


常见的伪文件:

/dev/null 数据黑洞,是软件模拟的设备。

/dev/zero 泡泡机,生成大量的0。

/dev/random 随机数生成器,是基于中断的IRQS产生随机数的。IRQS跟一些特殊的硬件绑定,基于这些硬件的interrupts将会提供给random设备。

/dev/urandom 随机数生成器,不受interrupts的限制。



#tee [OPTION] 1个输入,2个输出.

#COMMAND1 |tee FILE |COMMAND2

例如:

#ls /etc |tee /tmp/tee.out |tr 'a-z' 'A-Z'  转换字符并且将修改前的内容保存至/tmp/tee.out。

#uniq [OPTION] 忽略或者是移除连续的重复内容。


#tr [OPTION] "STRING1" "STRING2" < FILE 把FILE中查找到符合STRING1的内容操作为STRING2。

-c或--complerment   取代所有不属于STRING1的字符。 

-d或--delete   删除所有属于STRING1的字符。 

-s或--squeeze-repeats   把连续重复的字符以单独一个字符表示。 

-t或--truncate-set1   将STRING1的字符依次替换成STRING2中的字符,如果STRING1中的字符数目超过STRING2,那么STRING1多出的字符忽略。


#cut [OPTION] FILENAME 剪切

-d SEP(separator) 指定分隔符为SEP。默认是空格。

-f NUM 指定要显示第NUM个字段。

-f NUM 显示第NUM个字段。

-f NUM1,NUM3 显示第NUM1和NUM3个字段。

-f NUM1-NUM3 显示第NUM1到NUM3个字段。


例如:

#cut -d :-f1 /etc/passwd 

以:作为分隔符,显示第1个字段。

#cut -f1,7 /etc/passwd

显示第一个1字段和第7个字段,分隔符为空格。


#sort [OPTION] FILENAME 按照每个字符自左向右ASCII表中的值升序排列文件。

-n --numeric-sort 按照数值大小排序。

-r --reverse 降序排列。

-t 字段分隔符。

-k SEP 以某个字段为关键字或以某个字段开始进行排序。

-u 排序后相同内容只显示1次。仅限于相邻2行内容相同。

-f 忽略字符大小写。



例如:

#sort -t: -k3 /etc/passwd 以冒号为分隔符,从第3个字段开始排序。


#wc [OPTION] FILENAME (word conut) 统计文件行数、单词数、字节数(包括空格字符)。

-l 显示行数

-w 显示单词数

-c 显示字节数(byte)

-m 显示字符数(char)

-L 最长行包含的字符个数。


例如:

#wc /etc/passwd


你可能感兴趣的:(linux,null,管道,显示器,定向)