shell 速查手册

说明1:nohup,该命令可以在你退出帐户/关闭终端之后继续运行相应的进程。nohup就是不挂起的意思,不挂断地运行命令。

说明2:/dev/null代表linux的空设备文件,所往这个文件里面写入的内容都会丢失,俗称“黑洞”。

标准输入0:从键盘获得输入 /proc/self/fd/0

标准输出1:输出到屏幕(即控制台 /proc/self/fd/1 )

错误输出2:输出到屏幕(即控制台 /proc/self/fd/2)

 

后台运行不需要日志:nohup [命令] > /dev/null &

 

正确和错误日志写入一个文件:命令 >> 文件 2 >&1

 

正确和错误日志分别写入两个文件:命令 >> 文件名 2>>文件名

 

 

一、grep(过滤行):按照正则过滤

       grep+参数+查找内容+源文件

       -i 忽略大小写             -v 反向查找         -n 输出行号

       grep -E 正则表达式 文件名

1.判断一个文件是否存在

        [ -f /opt/module ]

       echo $?

       文件夹,返回1(false)

2.Shell脚本里如何检查一个文件是否存在?如果不存在该如何处理?

#!/bin/bash

if [ -f file.txt ]; then

   echo "文件存在!"

else

   echo "文件不存在!"

fi

3.统计正在连接的网络连接数量:netstat -an | grep "ESTABLISHED" | wc -l

4.rpm -qa | grep mysql | xargs sudo rpm -e            xargs:将前面的结果作为后面的参数

 

二、cut(操作列):只能指定分隔符或者Tab分割

       cut  -d 符号         -f 列号          文件名

 

1.请用shell脚本写出查找当前文件夹(/home下所的文本文件内容中包含字符”shen”的文件名称

[atguigu@hadoop102 datas]

grep -r "shen" /home | cut -d ":" -f 1

 

/home/atguigu/datas/sed.txt

/home/atguigu/datas/cut.txt


   
三、sed:

处理文本:sed /行号/a增s换d删/个数 文件名

/^R.*/:R开头的行

/.*T$/:T结尾的行

^$:空行

*:匹配单个字符多次  zo*-->zoo-->zooo<-->zozo(反例)

.:匹配任意一个字符一次

.*:匹配任意字符串

-n:只输出处理的行

 

 

1.删除文件中的第二行到第四行

      sed '2,4d' student.txt

2.

 

四、awk编程:支持任意分隔符

     awk '条件1{动作1} 条件2{动作2}...' 文件名

       awk -F :, 行切分规则   '/行匹配规则/操作 /行匹配规则/操作'           文件名

 

NF是每一行切割的列的个数,假设列是文件路径:

       /opt/module/hadoop-2.7.2/share/hadoop/httpfs/tomcat/bin/bootstrap.jar

那么$NF就是最后一列的值,也就是文件名称

 

       BEGIN{}                      END{}

 

 

 

1.使用Linux命令查询file1中空行所在的行号答案:

    awk '/^$/{print NR}' file1.txt

2.文件chengji.txt内容如下:

张三 40

李四 50

王五 60

 

使用Linux命令计算第二列的和并输出

[atguigu@hadoop102 datas]$

cat chengji.txt | awk -F " " '{sum+=$2} END{print sum}'

150

3.shell脚本里统计一个目录下(包含子目录)有多少个java文件?如何取得每一个java文件的名称(不包含路径)

find /opt/module/hadoop/ -name *.jar | awk 'END{print NR}'

find /opt/module/hadoop/ -name *.jar | awk -F "/" '{print $NF}'

4.找到 根分区 占用的空间

       df -h | grep "dev/sda3" | awk '{print $5}' | cut -d "%" -f 1

5.统计平均成绩 >=87 的人员姓名

 

       grep -v "Name" student.txt | awk '$6 >= 86 {print $2}'

6.找到系统中的用户(不包含伪用户)

       cat /etc/passwd | grep "/bin/bash" awk 'BEGIN{FS=":"} {print $1}'

 

五、sort:

sort-->-t 行切分规则-->-k 按第几列切分-->-n是否按照字母排序

 

1.用shell写一个脚本,对文本中无序的一列数字排序

sort -n test.txt|awk '{a+=$0;print $0}END{print "SUM="a}'

 

六、参考:

if [ $# -lt 1 ]

then

    echo 参数不足!

    exit

fi

 

$(( + )) 用于计算数值

'' 字符串

"" 执行引号中的代码

$()   引用系统命令

$     调用变量的值

$? 最后一次执行的命令的返回状态

set或者env    显示系统变量

posted @ 2021-08-13 14:31  monkey66  阅读(178)  评论(0编辑  收藏  举报