欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  科技

Linux编程 24 shell编程(结构化 if [ condition ] 数值比较,字符串比较)

程序员文章站 2022-06-26 09:54:45
一.概述 接着上篇讲的结构化命令,最后讲到了test命令的另一种写法 if [ condition ],它的语法格式如下: 第一个方括号之后和第二个方括号之前必须加上一个空格,否则就会报错。test命令可以判断三类条件:(1)数值比较(2)字符串比较(3)文件比较。 1.1 数值比较 比较 描述 例 ......

一.概述

  接着上篇讲的结构化命令,最后讲到了test命令的另一种写法 if [ condition ],它的语法格式如下:

--格式如下:
if  [ condition ]
then 
    commands
fi

  第一个方括号之后和第二个方括号之前必须加上一个空格,否则就会报错。test命令可以判断三类条件:(1)数值比较(2)字符串比较(3)文件比较。

  1.1  数值比较

比较

描述

例如

n1 -gq n2

检查n1是否与n2相等 

n1 ==n2

n1 -ge n2

检查n1是否大于或等于n2

n1 >=n2

n1 -gt n2

检查n1是否大于n2

n1 < n2

n1 -le n2

检查n1是否小于或等于n2

n1 <=n2

n1 -lt n2

检查n1是否小于n2

n1 <n2

n1 -ne n2

检查n1是否不等于n2

n1 !=n2

    下面测试脚本中,第一个条件使用 -gt,  value1是否大于value2。 第二个条件使用-eq 测试value1 是否与value2相等。
          Linux编程 24 shell编程(结构化 if  [ condition ] 数值比较,字符串比较)
    
但涉及到浮点数时,就会出错,bash shell 只能处理整数,如下所示:

          Linux编程 24 shell编程(结构化 if  [ condition ] 数值比较,字符串比较)

    对于浮点数处理,在前面章节中讲过使用bc 命令,下面脚本中先用bc来判断,如果条件成立则返回1, 条件不成立返回0, 下面的var1变量返回为1,输出了echo语句信息。
          Linux编程 24 shell编程(结构化 if  [ condition ] 数值比较,字符串比较)

  1.2  字符串比较

比较

描述

str1 = str2

 检查str1是否与 str2 相同

str1 != str2

 检查str1是否与 str2 不同

str1 < str2

 检查str1是否比 str2 小

str1 > str2

 检查str1是否比 str2 大

-n str1

 检查str1的长度是否非0

-z str1

 检查str1的长度是否为0

    (1) 字符串相等案例, 相等成立,输出了echo 信息。不等于案例就不在演示。
          Linux编程 24 shell编程(结构化 if  [ condition ] 数值比较,字符串比较)
    (2) 字符串比较
      对于字符串比较,在编程中很少使用,这里不在演示。 比较是使用标准的ascii顺序。
    (3) 字符串大小
      使用-n 和 -z 可以检查一个变量是否有数据,如下所示变量value1的值不为空,条件成立。
          Linux编程 24 shell编程(结构化 if  [ condition ] 数值比较,字符串比较)
      下面一个案例是 value1变量从未被定义过, 判断长度是否为0,  未被定义的变量但长度仍然是0,输出了if then中的echo信息。
          Linux编程 24 shell编程(结构化 if  [ condition ] 数值比较,字符串比较)
      总结:空的和未初始化的变量会对shell脚本测试造成空难性的影响,如果不确定一个变量的内容,最好在将用于数值或字符串比较之前先通过-z来测试变量是否有值。 下面案例中valu1变量未定义,value2变量内容为空,value3变量内容不为空, 分别输出信息如下:
          Linux编程 24 shell编程(结构化 if  [ condition ] 数值比较,字符串比较)