Shell的基本语句(条件语句)

112 阅读4分钟

算术运算

expr

expr命令是一个手工命令行计数器,用于在UNIX/LINUX下求表达式变量的值,一般用于整数值,也可用于字符串。

  • 变量和运算符之间,要用空格隔开。
  • 用反斜杠 \ 放在 shell 特定的字符前面;
  • 对包含空格和其他特殊字符的字符串要用引号括起来

image.png

bc

Bash内置了对整数运算的支持,但是并不支持浮点运算,而 bc 计算器可以很方便的进行浮点运算。

  • 支持交互式和非交互式两种方式。
  • 使用scale=n可以指定精度,即小数点后的位数。要写在算术表达式之前。
  • 非交互式运算,使用 echo "算术表达式" | bc。 多个算术表达式之间用分号隔开,例如:echo '1+1;2+2" | bc。

交互式

image.png

非交互式

image.png

变量的自增和自减

简写 等同于

表达式意义
let i++i=[[i+1]
let i--i=[[i-1]
let i+=2i=[[i+2]
let i-=2i=[[i-2]
let i*=2i=[[i*2]
let i/=2i=[[i/2]
let i%=2i=[[i%2]

生成随机数

使用 echo $[RANDOM%n] 可以生成随机数,n为正整数。 对 n 取余数的范围是 [0,n-1]。

  • echo $[RANDOM%10]生成的随机数范围为 [0,9]
  • 如果希望包含10的话,可以echo $[RANDOM%11],则随机数范围为 [0,10]。
  • 如果希望随机数范围都为正整数,即不包含0的话,可以echo $[RANDOM%10+1],此时随机数范围为[1,10]。

条件语句

条件测试

文件测试

文件测试格式:

  • test 操作符 表达式
  • [ 操作符 表达式 ]

文件测试操作符

操作符作用
-d测试是否为目录(Directory)
-e测试目录或文件是否存在(Exist)
-a测试目录或文件是否存在(Exist)
-f测试是否为文件(File)
-r测试当前用户是否有权限读取(Read)
-w测试当前用户是否有权限写入(Write)
-x测试当前用户是否有权限执行(eXcute)
-L测试是否为软连接文件

属性测试

操作符作用
-s FILE是否存在且非空
-t fdfd 文件描述符是否在某终端已经打开
-N FILE文件自从上一次被读取之后是否被修改过
-O FILE当前有效用户是否为文件属主
-G FILE当前有效用户是否为文件属组

整数测试

  • [ 整数变量1 操作符 整数变量2 ]
  • test 整数变量1 操作符 整数变量2
操作符含义
-eq等于
-ne不等于
-gt大于
-lt小于
-le小于或等于
-ge大于或等于

字符串测试

  • [ "字符串1"  =  "字符串2" ]   //测试字符串1和字符串2的内容是否相同
  • [ "字符串1" !=  "字符串2” ]   //测试字符串1和字符串2的内容是否不同
  • [ -z "字符串" ]   //测试字符串是否为空,或者指定的变量是否为空值。(测试字符串的长度是否为零)
  • [ -n "字符串" ]   //测试字符串是否存在,即是否不为空。(测试字符串的长度是否非零)
操作符含义
=字符串内容相同
!=字符串内容不同,! 号表示相反的意思
-z字符串内容为空
-n字符是否存在

逻辑测试

逻辑测试用于连接多个测试条件,并返回整个表达式的值。 逻辑测试主要有"逻辑与","逻辑或","逻辑否"三种。

  • [ 表达式1 ] 逻辑运算符 [ 表达式2 ] ...
  • 命令1 逻辑运算符 命令2 ...

逻辑运算符:

  • -a或&& :逻辑与,“而且”的意思,全真才为真。
  • -o或|| :逻辑或,“或者”的意思,一真即为真。
  • ! :逻辑否。

短路与 &&

CMD1 && CMD2

  •  全真才为真,一假即为假。      
  •  第一个CMD1结果为真 ,第二个CMD2必须要参与运算,才能得到最终的结果。
  •  第一个CMD1结果为假 ,总的结果必定为假,因此不需要执行CMD2。
  •  同时满足命令1 和命令2 的要求,才会返回正确。

短路或 ||

CMD1 || CMD2

  • 一真即为真
  • 第一个CMD1结果为真,总的结果必定为真,因此不需要执行CMD2。
  • 第一个CMD1结果为假,第二个CMD2必须要参与运算,才能得到最终的结果。

if 语句

if  判断条件
then  条件成立的分支代码
else  条件不成立的分支代码
fi  

image.png

简例

image.png

磁盘空间若超过80%,则提示尽快清理空间,否则提示正常

image.png

case

case 变量引用 in
 模式1)
     命令分支1
     ;;
 模式2)
     命令分支2
     ;;
 ...
 *)
     默认命令分支
 esac

简例

image.png

image.png