shell 脚本中的常用命令(diff、patch、cut、sort、uniq、tr、&&与||、test)

diff和patch

diff通常比较文件的内容,patch常用来打补丁

    diff的输出信息:
     
    [num1,num2]  [ a | c | d ]  [num3,num4]
     
    num1,num2               第一个文件中的行
     
    a                       添加
     
    c                       更改
     
    d                       删除
     
    <                       第一个文件中的内容
     
    >                       第二个文件中的内容

当作比较的两文件无差异时,diff命令不显示信息
在这里插入图片描述

diff后更换文件顺序的显示
在这里插入图片描述

c表示更改
在这里插入图片描述

    diff的常用参数
     
    -b                 忽略空格
     
    -B                 忽略空行
     
    -i                 忽略大小写
     
    -c                 显示文件所有内容并标示不同
     
    -r                 对比目录
     
    -u                 合并输出

diff -bB westos westos1 比较时忽略空格和空行
在这里插入图片描述

diff -i westos westos1 忽略大小写

在这里插入图片描述

diff -c westos westos1 显示文件所有内容并标示不同

在这里插入图片描述

diff -r sss/ test/ 显示目录的不同

在这里插入图片描述

diff -u westos westos1 > combine 将两文件合并,然后导入到新文件中
在这里插入图片描述

patch
 
dnf install patch -y                              安装patch
 
diff -u westos westos1 > westos.path              生成补丁文件
 
patch -b westos westos.path                       给westos打补丁同时备份原文件

在这里插入图片描述

CUT命令

cut

      -b                                         指定字节
 
      -d  :                                      指定“:”为分隔符(此处指原文件中的分割符)
 
      -f                                         指定列
 
      -c                                         指定截取字符
 
      --compement                                反选
 
      --output-delimiter=分割符                   指定输出的分割符

cut -d : -f 1 passwd
在这里插入图片描述

cut -d : -f 1-3 passwd
在这里插入图片描述

cut -c 1,3 passwd
在这里插入图片描述

cut -d " " -f 1-3 westos --complement

cut -d " " -f 1-2 westos --complement --output-delimiter=@
在这里插入图片描述

练习1:

用命令过滤ifconfig中此网卡的ip地址,输出时只显示ip,其它信息不显示

ifconfig ens160 | grep "inet " | cut -c 14-26
在这里插入图片描述

sort命令和uniq命令

    sort -n      纯数字排序
    sort -r      倒序
    sort -u      去掉重复数字
    sort -o      输出到指定文件中
    sort -t      指定分隔符
    sort -k      指定要排序的列

sort numbers 默认是正向排序,而且是对每行的第一个单个数字进行排序
在这里插入图片描述

sort -n numbers 纯数字排序(此时是根据数字的整个大小排序)
在这里插入图片描述

sort -urn numbers 反向纯数字去重排序

在这里插入图片描述

sort -urn numbers -o NUM 将输出导入文件

在这里插入图片描述

sort -t : -k 2 numbers 以:为分隔符对第二列数字进行排列
在这里插入图片描述

sort -t : -k 2 numbers -urn 以:为分隔符对第二列数字进行纯数字去重排列
在这里插入图片描述

练习2:

ls -l目录 可以显示目录中所有文件的属性

请按照文件大小进行排序并找出最大的2个文件并显示其名称

ls -l * | cut -d " " -f 5- | sort -nr | head -n 2 | cut -d " " -f 5

在这里插入图片描述

    uniq -u     显示唯一的行
    uniq -d     显示重复的行
    uniq -c     每行显示一次并统计重复行数

sort -n NUM | uniq -c 进行纯数字排序之后 重复数字只显示一次,并且在左边显示重复次数
在这里插入图片描述

sort -n NUM | uniq -d 进行纯数字排序之后显示重复的行
在这里插入图片描述

sort -n NUM | uniq -u 行纯数字排序之后显示不重复的行

tr命令

tr ‘a-z’ ‘A-Z’ < westos 小写转大写

tr ‘A-Z’ ‘a-z’ < westos 大写转小写
在这里插入图片描述

&&与||命令

&&表示正确,||表示错误

ping -c1 -w1 172.25.254.30 &> /dev/null && echo yes ||echo no 能ping通 输出为yes 不能为no
在这里插入图片描述

将上述命令写作脚本

#!/bin/bash
ping -c -w1 172.25.254.$* &>/dev/null && {
        echo yes
        exit
}||{
        echo no
        exit
}

在这里插入图片描述

test命令

test = [ ] test命令就等于“[ ]”

    test数字对比
   
    =        相等
     
    !=      不相等
     
    num1 -eq num2     判断 num1 是否和 num2 相等
     
    num1 -ne num2     判断 num1 是否和 num2 不相等
     
    num1 -gt num2     判断 num1 是否大于 num2 
     
    num1 -lt num2     判断 num1 是否小于 num2
     
    num1 -ge num2     判断 num1 是否大于等于 num2
     
    num1 -le num2     判断 num1 是否小于等于 num2

在这里插入图片描述

练习3:

做一个监控脚本:当/使用量超过80%时发送警告邮件到root用户邮箱中

​​​​​​​#!/bin/bash
 [ "`df -h / | tail -n 1 | awk '{print$5}' | cut -d "%" -f 1 `" -ge "20" ] && {
         echo "warning: / is full!" | mail -s warnimg root
         exit
 }
    test的条件关系和对空的判定
     
    -a             并且
     
    -o             或者
     
    -n             判定内容不为空
     
    -z             判定内容为空

3.test对文件的判定

-ef 文件id是否一致
在这里插入图片描述

-nt 文件1是否比文件2新
在这里插入图片描述

-ot 文件1是否比文件2老
在这里插入图片描述

-d 目录
在这里插入图片描述

-S 套接字

-L 软连接
在这里插入图片描述

-e 存在
在这里插入图片描述

-f 普通文件
在这里插入图片描述

-b 块设备
在这里插入图片描述

-c 字符设备
在这里插入图片描述

练习4:编写脚本完成以下任务

file_check.sh 在执行时

如果脚本后未指定检测文件,报错“未指定检测文件,请指定”

如果脚本后指定文件不存在,报错“此文件不存在”

当文件存在时,请检测文件类型并显示到输出中

#!/bin/bash
[ -z "$*" ] && {
        echo "ERROR: please input check file!!"
        exit
}
 
[ -e "$*" ] || {
        echo "ERROR: please input correct file!!"
        exit
}
 
[ -L "$*" ] && {
        echo "The input file is soft link"
        exit
}
 
[ -f "$*" ] && {
        echo "the input file is a common file"
        exit
}
 
[ -d "$*"] && {
        echo "the input file is adirectory"
        exit
}

猜你喜欢

转载自blog.csdn.net/qq_42958401/article/details/108303365