重定向

重定向和管道符:

1、重定向
    程序 = 指令 + 数据
               命令    变量

    在程序中,数据如何输入?又如何输出?
    
    数据输入:键盘  --  标准输入,但是并不是唯一输入方式;
        --stdin
        echo "123456" | passwd --stdin "username"

        例如:功能添加用户  useradd.sh user.txt文本文档1000个用户
            ./useradd.sh a
            ./useradd.sh b
            ...
            
            ./useradd.sh < user.txt
        
        while line ; do
            循环体 $line
        done < /etc/passwd
    
    数据输出: 显示器 -- 标准输出,但是并不是唯一输出方式
        ls /etc/ > a.txt

    fd 文件标识符 0-9 -- 相当于给文件分类;
        0    1    2
        0 -- 标准输出
        1 -- 标准输入
        2 -- 错误输入输出(标准错误)

    常见重定向符号
        1、标准输出
        >    覆盖重定向、非常危险
            set -C 关闭覆盖重定向功能   
            >|  强制重定向   
        >>    追加重定向
            不覆盖
        2、标准输入
        <     tr  替换文件内容
            tr set1 [set2] < file.txt    
        <<    将多行数据同时输入
            cat >>a.txt<<EOF
            >1
             >2
            >3
            >EOF
        3、错误输出
        2>  2>>    
        扩展:不需要输出内容,只需要输出状态;
            ls /etc/ > /dev/null 2> /dev/null
            echo $?  ($?--变量:上一条命令的执行状态)
            if $?等于0;么?
                OK--干!
            否则
                不
            结束

        ls 暗室逢灯  > /dev/null 2> /dev/null
            /dev/null  黑洞文件  来什么吃什么(删除)
            /dev/zero      吹泡泡    
    
        &>  &>>  ==  2&>1
            ls /etc/ &> /dev/null

2、管道 - tee

    command1 | command2 | command3 | ... ...
    
    前一个命令的执行结果交给后一个命令来执行;
    【Linux思想:结合小功能实现大功能】
    free -m | grep "^Mem" | cut -d' ' -f19
    free -m | grep "^Mem" | awk '{print $3}'

    tee  一路输入,两路输出
        tee /tmp/tee.out
        如果没有文件,会创建,默认如果文件存在有内容,会覆盖;

    练习:
    将/etc/passwd文件中的前5行内容转换为大写后保存至/tmp/passwd.out文件中;
        head -5 /etc/passwd | tr [a-z] [A-Z] > /tmp/passwd.out

    将登录至当前系统上用户信息汇总的后3位信息转换为大写后保存至/tmp/who.out文件中;
        who | tail -3 | cut -d' ' -f1 | tr [[:lower:]] [[:upper:]] | tee /tmp/who.out

        tail   查看文件尾部多少行(默认10行)
            -n     tail -n 5 /etc/passwd  == 简写 tail -5 /etc/passwd  
            -f      实时查看文件更新内容
                tail -f /var/log/message
        head  查看文件头部多少行(默认时行)
            -n  #    前#行, 简写 -#
        取 10 - 20 行:  head -20 /etc/passwd | tail -10

        tar 压缩
        tr   替换
        cut 切  
           

原文地址:https://www.cnblogs.com/azuressy/p/11343699.html