博客园 首页 私信博主 显示目录 隐藏目录 管理 动画

shell 脚本——第二节课 重定向和管道符

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
                 if[$? -eq 0];then
                      循环体
                 fi

            &> &>> == 2&>1
                 ls /etc/ $> /dec/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 //如果没有文件,会创建,默认如果文件存在有内容,会覆盖;


    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

3、文本处理工具 - wc,cut,sort,uniq

wc
    word count 统计文本文件中的字符个数
    用法 wc filename
    行数 字符个数 文件大小(字节) 文件名
    -l
    -w
    -c

cut
    用来做文件分隔
    -d 指定分隔符(delimiter)

    -f 指定输出的列数据

    --output-delimiter='xx'

    【cut的局限性:1、-d指定分隔符,不能同时指定多个2、不能做高级的格式化输出;所以我需要熟练掌握awk】

sort
    排序,默认查看第一个字符(包括数字字母以及空格和特殊符号),以及ASCLL码来排序(大小写不是)
    -n 按数字大小排序
    -r 逆序
    -t -k 指定分隔符以及指定按照那一列进行排序
    -f 忽略字符大小写
    -u uniq去重复

uniq

    连续且相同的命令,才被视为重复
    建议,先排序,后重序

 

 

 

 

 

虚无的 繁华里 有谁在等你吗
回头看 是孤独 留下的痕迹啊

posted @ 2019-08-12 09:23  MurkyCorners  阅读(230)  评论(0编辑  收藏  举报