程序是由数据+指令组成的,在程序设计时,默认从标准输入(standard-input)读取数据,向标准输出(standard-output)输出数据,程序执行错误则是输出至标准错误输出(standard-error)

   标准输入对于的文件描述符0

          输出1

          错误输出2

IO重定向就是将程序本来应该0.1.2读取或者输出的数据流重定向至其它文件

>标准输出重定向

            > filename ,将本来应输出至标准输出(显示器)的数据流重定向至filename的文件中,如果该文件中已有内容,则会覆盖文件内容

             set命令用于查看,定义shell的变量。其中set +C表示禁止覆盖已存在文件(注意:如果该文件存在,不管该文件有没有存内容,都是禁止覆盖的)set -C为关闭这个功能(默认)

>>追加输出重定向

             >>filename,如果filename文件中已经存有内容。不覆盖,而是追加至该文件

注意:以上两种方式仅会重定向标准输出,如果程序执行错误,仍会输出到标准错误输出,因为文件描述符分别是1和2,所以属于不同的数据流

2>重定向标准错误输出数据流

            2>filename,如果程序执行错误,将其输出定向至filename文件

            2>>

&>重定向输出

            &>filename,将标准输出和标准错误输出都定向至该文件

            &>>filename

有时在脚本中经常见到>/dev/null 2>&1:含义是将标准输出重定向至空设备文件,2>&1表示标准错误输出等同于标准输出,也定向/dev/null【好处是:只需要一次IO操作】

tee命令可以实现将命令执行结果即保存至文件又输出至屏幕一份,借助于管道实现

             command | tee filename

字符串替换命令

   1、tr,常用于管道操作中。对输出内容的特定字符串进行替换。

           #命令 | tr ‘原字符串’ ‘替换字符串’

           #命令 | tr -d ‘待删除字符串’   -d删除字符串

   2、按特定的字符串排序

          #sort [-tkn ] 文件名

                        -t 设定字段分割符

                        -k 设定选取的字段

                        -n 使用数字排序

过滤重复的数据--uniq

           uniq用于对输出内容中,相邻的、重复的数据进行过滤,仅保留其中一个。

           #命令 | uniq

           #命令 | uniq -c 对找到的行进行统计

xargs :是将第一个命令的输出结果交给xargs后所带的命令进行处理。

例:ls a* | tee file1 | xargs rm –t

例2:文件删除提示

  read -p “请输入你要删除的文件:” A ;

        ls $A | tee file1 | xargs rm –f | echo `cut file1`已被删除 | echo ‘ ’ > file1



 

<输入重定向

            在linux中,有很多程序需要从标准输入读取数据,输入重定向就是改变一个程序的标准输入源

            wc < /etc/fstab

<<here document此处生成文档

              <<没有追加标准输入一说,<<用于生成文档

              cat << EOF会出现一个输入提示,用户输入的内容会以一个文件的形式显示出来,EOF只是一个文件结束符(可以换成其他字符实现),表示至此生成为一个文件

            cat >> /tmp/filename <<EOF表示将生成的文档再以输出重定向的方式保存至某文件,在脚本中常用此方法生成文档


管道:将一个命令的标准输出作为另一个命令的标准输入

         cat /etc/issue | tr 'a-z' 'A-Z'