学SHELL的第二天

重定向和管道符:
1、重定向
   程序 = 指令 + 数据
            命令 + 变量
   数据输入:键盘 --标准输入,但是并不是唯一输入方式;
    --stdin
    echo "123456"| passwd --stdin "username"
    例如:功能添加用户  useradd.sh user.txt文本文档1000个用户
       ./useradd.sh a
       ...
       /.useradd.sh z
       ./useradd.sh<user.txt(注意,写在user.txt里的文件要按列写)
       while linr;do
       done</etc/passwd
  数据输出:显示器 -- 标准输出,但并不是唯一的输出方式
       ls  /etc/ >a.txt
   fd 文件标识符 0-9-- 相当于给文件分类;
    0      1     2
    0--标准输入
  1--标准输出
  2--错误输入输出
 常见重定向符号
  1、标准输出
  >    覆盖重定向
  set - C  这个是去掉覆盖重定向功能
  >|     强制重定向
  >>   追加重定向,不覆盖
  2、标准输入
  <           tr    替换文件内容
   用法:tr   原来的    现在的<file.txt
  <<         将多行数据同时输入
   cat >>zat.txt<<ECF
   >1
   >2
   >EOF
  3、错误输出
   2>
   扩展:不需要输出内容,只需要输出状态
   ls /etc/ >/dev/null 2>/dev/null
   &> &>>==2&>1
   ls /etc/ &>/dev/null
2、管道 - tee
 command1|command2|command3|.。。
 前一个命令的执行结果交给后一个命令来执行;
 free -m |grep "^Mem"|cut -d -f19
 tee 一路输入,两路输出
  tee /tmp/tee.out
  如果没有文件,会创建,默认如果文件存在有内容,会覆盖;
 练习:
 将/etc/passwd文件中的前5行内容转换为大写后保存至/tmp/passwd.outwen文件中
  head -5 /etc/passwd |tr [a-z] [A-Z]>/tmp/passwd.out
 将登录至当前系统上用户信息汇总的后三位信息转换为大写保存至/tmp/who.out
  who |tail -3
3、文本处理工具 --wc,cut,sort,uniq
wc
 word count 统计文本文件中的字符数量
 行数 -l     字符个数   -w      文件大小  -c     文件名
cut
 用来做文件分割
 -d    指定分隔符
 -f    指定输出的列数据
 【cut 的局限性:1、-d指定分隔符,不能同时指定多个2、不能做高级的格式化输出:所以我们要熟练掌握awk】
sort   排序命令
 根据ASCLL码来进行排序
 常用参数:
  -r 逆序
  -f 忽略字符的大小写
  -t DELIMITER指定字符段分隔符
  -k #已指定字符的第几段进行排序
  -n 指定以数值大小进行排序
  -u uniq 排序去除重复,重复不显示
uniq
 连续且相同的命令去重
 建议先排序后去重
 -c显示重复了多少次,统计重复次数
 -d仅仅显示重复过的行
 -
脚本练习题:
批量创建用户
 if id $* &>/dev/null;then
        echo "这个用户已经存在"
else
        for i in $*;do
                useradd $i
                echo "123456"|passwd --stdin "$i" &>/dev/null
                echo "用户$i添加成功"
        done   
        exit 0
fi
原文地址:https://www.cnblogs.com/zrxuexi/p/11347374.html