bash的算术运算和条件测试语句

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了bash的算术运算和条件测试语句相关的知识,希望对你有一定的参考价值。


                   bash的算术运算和条件测试语句 

  

  1.wc:

  2.cut命令:

    cut - 在文件的每一行中提取片断

 注意:能够被cut命令修剪的文件或数据内容,一般是具有某种特定格式会或结构文本文件或数据内容;

     

    格式:cut [OPTION]... [FILE]...

     

    常用选项:

    -d, --delimiter=DELIM:指定在实施修剪操作时使用的字段分隔符号,默认是TAB

                   (空白字符);

    -f, --fields=LIST:根据指定的字段分隔符号来指定要保留的字段编号的列表;


    LIST称为字段列表,地址定界,书写方法:

    1. NUM:选择被指定的单个数字所表示的字段,该字段将被保留;

    2. NUM1,NUM2,NUM3,....:离散的多个被指定的字段的数字的列表,所有数值所代表的字段都被保留;

    3. NUM1-NUM2:连续的多个被指定的字段的数字列表,所有数值代表的字段均被保留;

    4. NUM1-:从NUM1开始直到行尾的所有字段;

    5. -NUM2:从行首第一个字段到NUM2字段结束的所有字段;

      --output-delimiter=STRING:指定输出数据时的字段分割符号;

   

   例:

     [[email protected] ~]# cut -d":" -f 1 /etc/passwd

     root

     bin

     daemon

     adm

     lp

     

     

    [[email protected] ~]# df | tr -s ' '| cut -d " " -f 2-4

    1K-块 已用 可用

    9754624 3512660 6241964

    485168 0 485168

    499860 0 499860

    499860 7332 492528

    499860 0 499860

    191140 138508 52632

    99972 4 99968

    99972 24 99948

    99972 0 99972




  3.awk:

    gawk - pattern scanning and processing language

    常用选项:

    -F fs--field-separator fs:指定字段分割符,默认空白字符;

    对于awk,根据字符分割符切分出来的名字段,分别使用$1,$2,$3,...$NF来进行识别,$1是awk的内部变量;

    格式:awk|gawk [Options]... '/PATTERN/{print $1,$2}'


    例:

    [[email protected] ~]# df | awk '{print $1,$2}'

    文件系统 1K-块

    /dev/sda3 9754624

    devtmpfs 485168

    tmpfs 499860

    tmpfs 499860

    tmpfs 499860

    /dev/sda1 191140

    tmpfs 99972

    tmpfs 99972

    tmpfs 99972


   

  4.sort:

    sort - sort lines of text files

    对于指定文件中的行,按照ASCII编码表中的字符顺序进行排序输出;

    格式:

    sort [OPTION]... [FILE]...

    常用选项:

    -n:以数字的数值大小作为排序依据进行排序;

    -r:倒序显示排序结果;

    -R:随机排序,简陋,不适合复杂环境的排序要求;

    -u:重复出现的行只出现一次,去重:连续且相同的行为重复行;

    -t:指定字段分隔符;

    -k:指定根据哪个关键字字段进行排序,一般和-t同时使用;

   

  例:

    [[email protected] ~]# sort -n -t " " -k 1 /etc/passwd|head -2

    abrt:x:173:173::/etc/abrt:/sbin/nologin

    adm:x:3:4:adm:/var/adm:/sbin/nologin

          

  例:选出12 13 14的最大值和最小值

    [[email protected] ~]# vim 1

    12 13 14

    [[email protected] ~]# cat 1 | tr ' ' '\n'|sort -r | head -1

    14

    [[email protected] ~]# cat 1 | tr ' ' '\n'|sort -r | head -3 | tail -1

    12



   

  

       

  5.uniq

    uniq - 删除排序文件中的重复行

    注意:uniq命令本身不具有排序功能;

    格式:

    uniq [OPTION]... [INPUT [OUTPUT]]

    常用选项:

    -c, --count:计算重复行的重复次数;

    -d, -repeated:显示重复行,只显示一行;

    -u, --unique:仅显示无重复行;

 例:

   [[email protected] ~]# vim 1

   [[email protected] ~]# cat 1

   12 13 14

   12 13 14

   1 

   1

   [[email protected] ~]# cat 1 | uniq -c -d

   2 12 13 14

   2 1 



  

  6.diff

    diff - 找出两个文件的不同点(逐行比较两个文件的内容)

    格式:

    diff [option] 源文件 目标文件

    制作patch文件:

    # diff file1 file2 > patch_file

注意:patch_file中记录的是file1和file2文件相比有哪些不同;使用patch_file时,

    应该向file1打补丁;


 例:

   [[email protected] ~]# vim 0

   [[email protected] ~]# cat 0

   12 13 14 15 

   22 33 44 55

   123456789

   [[email protected] ~]# vim 1

   [[email protected] ~]# cat 1

   12 13 14

   12 13 14

   123456789 

   [[email protected] ~]# diff 0 1

   1,3c1,3

   < 12 13 14 15 

   < 22 33 44 55

   < 123456789

   ---

   > 12 13 14

   > 12 13 14

   > 123456789 




  7.patch

    patch - apply changes to files

    格式:

    patch [-blNR][ -c| -e| -n][-d dir][-D define][-i patchfile]

    [-o outfile][-p num][-r rejectfile][file]

    常用选项:

    -i  patchfile  or --input=patchfile:用于指明patch文件的路径;



    


                

               


 条件测试命令:

          

   test命令==[ 命令,bash的内置命令;

   格式:

   test expression

   [ expression ]

   [[:bash的关键字,一般仅用于某些特定结构或格式之中;

   ` expression `


注意:此类条件测试命令一般没有执行结果,仅有执行状态返回值,如果其执行状态返回值为0,表示ture,为1,则表示false;



       


 条件测试命令共有的三类条件测试表达式:


  1.数值测试:双目操作;

   测试操作符:

      -eq:测试两个数值是否相等,相等为真,不等为假;

      -ne:测试两个数值是否不等,不等为真,相等为假;

      -lt:小于,测试左边数值是否小于右边数值,小于为真,不小于为假;

      -gt:大于,测试左边数值是否大于右边数值,大于为真,不大于为假;

      -lt:小于等于,测试左边数值是否不大于右边数值,不大于为真,大于为假;

      -ge:大于等于,测试左边数值是否不小于右边数值,不小于为真,小于为假;


  注意:bash仅支持整数,不支持浮点数;


     

  2.字符串测试

    1)双目测试

      ==|=:测试两个字符串是否为相同的字符串;相同为真,不同为假;

      !=: 测试两个字符串是否为不同的字符串,不同为真,相同为假;

      >:  测试左边的字符串所对应的ASSCII编码是否比右边的字符串对应的ASCII编码大,大于为真,小于为假;

      <:  测试左边的字符串所对应的ASSCII编码是否比右边的字符串对应的ASCII编码小,小于为真,大于为假;

      STRING =~:测试左侧的字符串能否被右边的PATTERN匹配,能匹配为真,不能为假;


  注意:>,<,=~这三类测试操作符只能用在` expression `测试语句中



    2)单目测试:

      -z:‘STRING’:测试STRING是否为空串,空串为真,不空为假;

      -n:‘TSTRING’:测试STRING是否为非空串,非空为真,空串为假;


  注意:

    1.通常情况下,字符串需要用引号引用,单引号或双引号都可以,只有在特定的情况下,只能选择单引号或双引号之一;

     2. []和[[]]在某些情况下,意义不完全相同,要区分对待;

     3. 如果使用[]或[[]]进行条件判断,在表达式的两端都留有空白字符,以区分命令和参数之间的关系;

     4. 所有的双目测试操作符和参数之间也要留有空白字符;




  3.文件测试

    1)单目测试:

     -a|-e FILE:测试文件是否存在,存在为真,不存在为假;  

     -b FILE:测试文件是否存在且为块设备文件,存在且为块设备文件为真,否则为假;

     -c FILE:测试文件是否存在且为字符设备文件,存在且为字符设备文件为真,否则为假;

     -d FILE: 测试文件是否存在且为目录文件,存在且为目录文件为真,否则为假;

     -f FILE:测试文件是否存在且为普通文件,存在且为普通文件为真,否则为假;

     -h|-L FILE:测试文件是否存在且为符号链接文件,存在且为符号链接文件为真,否则为假;

     -s FILE: 测试文件是否存在且其大小大于0,存在且其大小大于0为真,否则为假;      

     -S FILE: 测试文件是否存在且为套接字文件,存在且为套接字文件为真,否则为假;

     -t FD:  测试文件描述符是否在终端上被打开,在终端上被打开为真,否则为假;

     -r FILE: 测试文件是否存在且当前用户是否被授予读权限,存在且授权为真,否则为假;        

     -w FILE: 测试文件是否存在且当前用户是否被授予写权限,存在且授权为真,否则为假;

     -x FILE: 测试文件是否存在且当前用户是否被授予执行或搜索权限,存在且授权为真,

           否则为假;

      



     文件特殊权限标识测试:

     -u FILE: 测试文件是否存在且设置了SUID,存在且设置为真,否则为假;

     -g FILE: 测试文件是否存在且设置了SGID,存在且设置为真,否则为假;

     -k FILE: 测试文件是否存在且设置了STICKY,存在且设置为真,否则为假;



     文件的所有权测试

     -o FILE:测试文件是否存在且其属主这为当前有效用户,存在且属主为当前有效用户为真,

           否则为假;

     -G FILE:测试文件是否存在且其属主这为当前有效用户,存在且属主为当前有效用户为真,

           否则为假;




      

    2)双目测试:

     FILE1 -ef FILE2:测试两个文件是否拥有相同的Inode编号,即两个文件是否互为硬链接;


     测试语句中添加逻辑运算符号;

     1.利用bash的逻辑运算符号;

      [ expression1 ] && [expression2]

      [ expression1 ] || [expression2]

      ! [ expression ]

  

    


     2.利用条件测试命令本身的逻辑运算符号;

      [ expression1 -a expression2 ]

      [ expression1 -o expression2 ]

      [ ! expression ]




     命令的执行结果:

     1.命令的正常输出结果;

     2.命令的执行状态返回值;

       0-255

       0:表示命令执行成功或条判断为真;

       1-255:表示命令执行失败或条件判断为假;

       1,2,127:系统默认保留的;

       3-126,128-255:用户自定义的命令执行状态返回值;



    


   exit命令:

    exit - exit the shell

    格式:exit[n]

    退出shell时可以使用n作为状态返回值,如果没有指定n,

    则默认的状态返回值为最后一条命令的状态返回值;


   注意:

    当shell脚本运行时,一旦遇到exit命令,将立即结束运行次脚本的shell进程,

    同时此脚本的运行也会停止,其后续所有命令都不会在被解释执行,因此,

    包含了exit命令的脚本,不要使用source命令来执行;


   




  bash的颜色显示规则:

    调用了ASCII编码对于颜色的设置方案;


    Ctrl键:\033

    [:控制字符和颜色代码之间的分隔符;

    所有的颜色代码都应该使用m结尾;


    颜色代码:

        0:关闭颜色显示属性,恢复为黑白色;

        1:加粗显示文本字符;

        4:为文本字符添加下划线;

        5:文本字符闪烁;

        7:将文本字符的背景颜色和前景颜色交换;

        8:将文本字符的背景颜色设置为与前景颜色相同;

        30-39:设置文本字符的前景色,38,39为保留,暂时未被使用;

        40-49:设置文本字符的背景色,48,49为保留,暂时未被使用;

      

   例:

     技术分享图片


    注意:此类控制字符和颜色代码必须防止echo -e模式中显示;






       

               

以上是关于bash的算术运算和条件测试语句的主要内容,如果未能解决你的问题,请参考以下文章

bash的算术运算和条件测试语句基础

bash算数运算和条件测试语句

bash中的算数运算和条件测试语句

bash算术运算和条件测试

bash的算术运算和条件测试方法

bash的算术运算与条件测试