云服务器

Linux | shell脚本-比较判断和运算语句

2019-12-05 09:45:29 251

简介

在我们写shell脚本的过程中,经常需要作比较判断,例如比较哪个数字大,判断文件是否存在,判断文件是否是目录,判断是否为真等操作。有时候我们还需要做运行,例如加减乘除等等,今天就来简单介绍比较表达式和运行表达式。

 

二 比较判断

1、文件状态:

表达式:[ -e 文件路径 有空格隔开

例如:[ -e /root ] 判断/root 是否存在

(1) -e 是否存在           存在为真

(2) -d 是否是目录        是目录为真

(3) -f 是否是文件         是文件 为真

(4) -x 是否有执行权限  有执行权限为真

(5) -w 是否有写权限    有写权为真

(6) -r 是否有读权限    有读权限为真

 

2、整数值比较

[ num选项 num2 ]  

例如:[ 2 -eq 2 ] 或者用变量[ $a -eq $b ]

(1) -eq 等于

(2) -ne 不等于

(3) -gt 大于

(4) -ge 大于等于

(5) -lt 小于

(6) -le 小于等于

 

3、字符比较

[ "string字串1" 选项  "string字串2" ]

例如:[ $name == "jim" ]

注意:选项和字串两边有空格!!!!字符一定用双引号引住。

(1) = =    相等  相等为真             

(2) !=   不相等  不相等为真  0

(3) -z      空  空为真               

(4) -z  非空  非空为真        

 

4、逻辑判断:(两个或两个以上判断条件时使用逻辑比较)

(1) 逻辑 与:

&& 多个条件同时成立 [条件1] && [条件2]

(2) 逻辑 或:

|| 多个条件只要有一个条件成了就可以  [条件1] || [条件2]   

(3) 逻辑 非  =取反

PS:两种表达方式:

1.&&----[ 10 -gt 8 ] && [ 5 -lt 6 ]     2. -a 用法:10 -gt 8 -a 5 -lt 6 ]

1.||----[ 10 -gt 8 ] || [ 5 -lt 6 ]     2. -o 用法:10 -gt 8 -0 5 -lt 6  ]

(4) 调用变量时"" 与''的区别

字符用两个都一样输出,当变量时,单引号输出字符,双引号 使用变量的功能

例如:a =10 b=10

"$a + $b"=num2 结果是 10 + 10 =num2

'$a + $b'=num2  结果是 $a + $b =num2

 

三 运算语法

1、运算符

+  

 -

\*

  /

取余  %

自加 ++    i=0;let i++;echo $i

自减1  --      j=10;let j-- ; echo $j

 

2、运算命令\

(1) expr命令  运算符: + - \* / %

expr 整数整数2...    整数值由变量提供,直接给出运算结果

`expr $num1 + $num2`

(2) let命令

操作变量值,只运算,不输出结果

i=0;let i++;echo $i

     

i=0;i++;echo $i

 

(3) 使用$[]或者 $(())表达式(需要借助echo输出结果,运算类型与expr类似)

PS:乘法不需要加转义符 \

使用变量时,直接指定变量名,不用加$符号

echo $[]

echp $(())

1)例子:a=10 b=10

没加转义:\

      

加转义:\

 

2)a=10 b=10

      echo $((a*b))

      

 

(4) 变量的递增、递减等操作

表达式的简化:

+=x  每次自加x  

-=x  每次自减x

i=i+2 ----> i+=2

i=i-2 ----> i-=2

i=i-1 ----> i--

i=i*2 ----> i*=2

i=i+1 ----> i++

i=i%2 ----> i%=2  

(5) 实战例子:加减乘除计算器

vim test.sh

#!/bin/bash

read -p “请输入第一个数字” -t 10 num1

read -p “请输入第二个数字“   -t 10 num2

 

[ -z $num1 ] && exit

[ -z $num2 ] && exit

 

sum=`expr $num1 + $num2 `   

sum0=`expr $num1 - $num2 `

sum1=`expr $num1 % $num2`

sum2=`expr $[num1 * num2]`

sum3=`expr $((num1 / num2))`

echo "$num1 + $num2=$sum"

echo "$num1 % $num2=$sum1"

echo "$num1 * $num2=$sum2"

echo "$num1 / $num2=$sum3"

echo "$num1 - $num2=$sum0"

运行结果:

 

 

四 重定向(改变数据的输出设备)

1、重定向输出

            >   覆盖

            >> 追加

2、重定向输入

            <   覆盖

            <<  追加

3、重定向错误输出

            2>  覆盖

            2>> 追加

4、重定向输出和错误输出

            &>  覆盖

            &>> 追加

5/dev/null  一个黑洞设备

 

五 实战

(1) &|| 脚本中的使用,重定向的使用

&& 前面的操作执行成功后面才继续执行,反之不执行后面的操作

例子:ping -c 3 1.1.1.1 &> /dev/null && echo "on line" (命令行不输出ping结果,直接输出结果)

 

例子: ping -c 3 121.201.88.88 2> /dev/null && echo "on line"(这个在命令行输出ping的结果,并且输出结果) 


成功就输出内容   失败就什么都不输出

Ping失败,不输出内容

 

 

||  前面的操作执行,后面的操作才执行。若前面的操作执行成功,后面的操作就不执行。

        ping -c 2 121.201.88.89 || echo “pc not online”

 

 

(2) 实战:检测主机是否在线

vim test.sh

 

 


 

睿江云官网链接:https://www.eflycloud.com/home?from=RJ0032

上一篇: 无

微信关注

获取更多技术咨询