Shell入门02

Shell入门-02

1.重定向 标准输入(<) 标准输出 标准错误重回定向

         程序 = 指令 + 数据

                          命令   变量

         在程序中,数据如何输入?又如何输出?

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

                                   --stdin

                                   不进入交互式界面,直接输入密码

                                   echo “123456” | passwd –stdin “username”

                                   例如:功能添加用户,useradd.sh 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.标准输出

                          0>           --      覆盖重定向、非常的危险 重定向后数据将会丢失

                          set –C     关闭重定向功能,剪掉C的功能 C的功能就是去掉重定向

                          set +C      加上重定向

                          >|             强制重定向

                          >>           --      追加重定向 将数据内容追加到文件末尾  不覆盖

                                       less more

                                       cat a.txt | more/less

                  2.标准输入

                          1<             a < b  b的内容交给a

                                            tr 替换  tr set [set2]    默认进入交互式界面手动输入替换内容

                                                             tr set [set2] < file.txt

                                            tr abc ABC < /etc/passwd

                                                     |  |

                       单个字符

                                            tr abc ABC < /etc/passwd > /etc/passwd

<<             cat 查看,将多行数据同时输入

                                            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

2.管道符 – tee

         command1|command2|command3|… …

         前一个命令的执行结果交给后一个命令来执行;

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

                          free –m

                          m  --- 单位

free –m|grep “^Mem” | cut –d’ ’ –f19

free –m|grep “^Mem” | awk ‘{print $3}’

s = ` free –m|grep “^Mem” | cut –d’ ’ –f19`

if [$s –gt 1000];then

         告警

fi

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 实时查看文件更新查看

Sleep  等待多长时间后再执行

              tail –f /vaar/log/message

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

              -n head –n 5 /etc/passwd = head -5 /etc/passwd

head -20 /etc/passwd | tail -10

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

wc

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

        

         行数14 字符个数72 文件大小711字节 文件大小

         –c 文件大小

         -l  看行数

         -w 字符个数

cut

         用来做文件分割

         -d 指定分隔符(单个) (delimiter)

         -f 指定多少列数 –f2输出第二列

                                      -f1,3输出第一列到第三列

                                      -f1-3

                  history | cut –d’ ’ –f3 /etc/passwd

         --output-delimiter=’xx’

                  cut –d’ ’ –f1,3 /etc/passwd

 

cut –d’:’ –f1,3 –output-delimiter=’          ’ /etc/passwd

格式化输出

 

Cut的局限性:

**-d 指定分隔符不能同时指定多个**

**不能做高级的格式化输出**           需要熟练掌握awk

sort

         排序命令,默认将第一个字符(数字、字母、特殊符号、空格)按照ASCII码值来进行排序

         -n 按照数值大小排序 特殊字符和字母在数字前面

         -r 倒序排列

-f 忽略字符大小写

-k 已指定字段的第几段进行排序

-u uniq 排序去重复,重复的不显示

-t指定字段分隔符

uniq

 

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

建议,先排序后去重

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

                    Sort filename | uniq –c

                    -d 重复的行

练习:

显示/etc/passwd的第六行到第十行,按照第三个字段进行数值大小排序,最后显示第一列

 

posted @ 2019-08-13 13:58  KAJIA1  阅读(198)  评论(0编辑  收藏  举报