linux shell中 if else以及大于、小于、等于逻辑表达式介绍

您所在的位置:网站首页 大于90小于95怎么表示 linux shell中 if else以及大于、小于、等于逻辑表达式介绍

linux shell中 if else以及大于、小于、等于逻辑表达式介绍

2023-06-26 00:49| 来源: 网络整理| 查看: 265

比如比较字符串、判断文件是否存在及是否可读等,通常用"[]"来表示条件测试。

注意:这里的空格很重要。要确保方括号的空格。笔者就曾因为空格缺少或位置不对,而浪费好多宝贵的时间。

if ....; then .... elif ....; then .... else .... fi [ -f "somefile" ] :判断是否是一个文件 [ -x "/bin/ls" ] :判断/bin/ls是否存在并有可执行权限 [ -n "$var" ] :判断$var变量是否有值 [ "$a" = "$b" ] :判断$a和$b是否相等 -r file     用户可读为真 -w file     用户可写为真 -x file     用户可执行为真 -f file     文件为正规文件为真 -d file     文件为目录为真 -c file     文件为字符特殊文件为真 -b file     文件为块特殊文件为真 -s file     文件大小非0时为真 -t file     当文件描述符(默认为1)指定的设备为终端时为真

 字符串判断

str1 = str2      当两个串有相同内容、长度时为真 str1 != str2      当串str1和str2不等时为真 -n str1        当串的长度大于0时为真(串非空) -z str1        当串的长度为0时为真(空串) str1           当串str1为非空时为真

含条件选择的shell脚本 对于不含变量的任务简单shell脚本一般能胜任。但在执行一些决策任务时,就需要包含if/then的条件判断了。shell脚本编程支持此类运算,包括比较运算、判断文件是否存在等。 基本的if条件命令选项有: - eq —比较两个参数是否相等(例如,if [ 2 –eq 5 ]) -ne —比较两个参数是否不相等 -lt —参数1是否小于参数2 -le —参数1是否小于等于参数2 -gt —参数1是否大于参数2 -ge —参数1是否大于等于参数2 -f — 检查某文件是否存在(例如,if [ -f "filename" ]) -d — 检查目录是否存在 几乎所有的判断都可以用这些比较运算符实现。脚本中常用-f命令选项在执行某一文件之前检查它是否存在。

-------------------------------------------------------------------------------------------

由于程序需要,我要判断一个浮点数是否大于另一个浮点数。

大概情况描述如下:

变量 mya的值为一个两位小数,这个值是这么取的:

 

Shell代码  收藏代码 [nigelzeng@ubuntu ~]$ df -h   Filesystem            Size  Used Avail Use% Mounted on   /dev/sda1            5.7G  3.0G  2.5G  55% /      [nigelzeng@ubuntu ~]$df -h | grep xvda2 | awk '{print $2}' | sed 's/G//'   5.7  

 

 mya=` df -h | grep xvda2 | awk '{print $2}' | sed 's/G//' `

 

然后我希望让它跟4进行判断,

一开始是想利用整数来进行判断,但是不行:

 

Shell代码  收藏代码 [nigelzeng@ubuntu ~]$if [ $mya -le 4 ]; then echo "ok";else echo "fail"; fi   -bash: [: 5.7: integer expression expected  

 

 shell 会报错,提示integer expression expected,

只能判断整数,而不是5.7这个浮点数。

但是shell里面是没有变量类型的,所以需要想个别的办法。

参考了CU里的大牛们的建议,这样写这个比较就可以了:

Shell代码  收藏代码 [nigelzeng@ubuntu ~]$if [ $(echo "$mya "需要被转义. 具体参考Example 26-11来查看这个操作符应用的例子. -z 字符串为"null".就是长度为0. -n 字符串不为"null" 注意: 使用-n在[]结构中测试必须要用""把变量引起来.使用一个未被""的字符串来使用! -z 或者就是未用""引用的字符串本身,放到[]结构中。虽然一般情况下可

以工作,但这是不安全的.习惯于使用""来测试字符串是一种好习惯.

举例:

1.数字比较

#!/bin/bash      i=6   a=10      if [ $a -eq 10 ]   then       echo "a = 10"   fi      if [ $a -ne $i ]   then       echo "a != $i"   fi      if [ $a -gt $i ]   then        echo "a > i"   fi      if [ $a -lt $i ]   then       echo "a  i"   fi      if(("$a" > "$i"))   then       echo "(())a>i"   fi      if(($a != $i))   then       echo "(())a!=i"   fi   备注:通过sh运行脚本,[ ]运算是可以的,而(())运行出错

chmod 777 后,直接./ 运行,都可以

2.字符串比较

#!/bin/bash      a="123"   b="1234"   c="123"      if [ "$a"x != "$b"x ]   then       echo "a != b"   fi      if [ "$a"x = "$c"x ]   then       echo "a == c"   fi  

判断字符串为空

[cpp] view plaincopyprint? if [ -z "$d" ]   then       echo "d is empty"   fi  

备注:

-e                          文件存在 -a                          文件存在(已被弃用) -f                          被测文件是一个regular文件(正常文件,非目录或设备) -s                          文件长度不为0 -d                          被测对象是目录 -b                          被测对象是块设备 -c                          被测对象是字符设备 -p                          被测对象是管道 -h                          被测文件是符号连接 -L                          被测文件是符号连接 -S(大写)                



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3