shell:IO重定向、管道符

1.重定向:

  程序 = 指令 + 数据

  重定向:在程序中,数据如何输入?又如何输出?

    数据输入:键盘 -- 标准输入,但是并不是唯一输入方式

            -- stdin

            例如:添加用户的代码 给一个user.txt文本,文本里有1000个用户

              useradd.sh < user.txt

                < 标准输入重定向

  重定向分为:标准输入、标准输出、标准错误

    while line;do

      循环体 $line

    done < /etc/passwd

    数据输出:显示器 -- 标准输出,但并不是唯一输出方式

      ls /etc/ > a.txt

    fd文件表示符 0-9 ----相当于给文件分类;

      被定义的文件标识符0:标准输出 1:标准输入 2:标准错误

  常见重定向符号

    1.标准输出

      >:覆盖重定向 ,很危险

      set -C去掉C的功能,C的功能为覆盖重定向的功能 set+C把关闭的功能开启

      >|:强制重定向,在覆盖重定向功能关闭的时候,也可以

      >>:追加重定向

        cat a.txt | more

    2.标准输入

      < :

        tr abc ABC < /etc/passwd > /etc/passwd.bak 把abc替换成ABC,单个字符进行替换

      <<:将多行数据同时输入

        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/ &>/dev/null   不管结果正确不正确,结果都重定向到null

2.管道符

  command1|command2|command3|......

  第一个命令的执行结果交给后一条命令来执行

  【Linux思想:结合小功能实现大功能】

    free -m | grep "^Mem" | cut -d ' ' -f19

    free -m | grep "^Mem" | awk '{print $3}'

  find 【目录】 -name ab* -type f -perm 600 -mtime +7 | xargs rm -rf

  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 ==tail -5

        -f   实时查看文件更新内容

      head   查看文件头部多少行(默认10行)

        -n   head -n 5==head -5

3.文本处理工具

wc

  word count 统计文本文件中的字符个数

  用法:wc -【】 filename

  -l   行

  -w   字

  -c    大小

  -m    字符

cut

  从一个本文文件中提取文本列

  用法:cut -d" " -f fileds

     cut -c 字符区间

    -d   后面接分割字符,与-f一起使用

    -f   依据-d分成的数段,用-f是取第几段的意思

    -c   以字符的单位取出固定字符区间

    --output-delimiter=" "

  分割用:输出用制表符tab

    cut -d":" -f1,3 --output-delimeter="  " /etc/passwd

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

sort 排序命令

  -n   按照数字大小排列

  -r   逆序

  -n   排序后去重

uniq  去重

  连续且相同的才被视为重复

  建议先排序再去重

  -c  统计某些字符重复的次数

  -i   忽略大小写的不同

  -n  只显示不重复的行

posted on 2019-08-07 11:23  埃希123  阅读(141)  评论(0编辑  收藏  举报

导航