shell中的运算

数学比较运算

  1. 运算符解释
  2. -eq 等于
  3. -gt 大于
  4. -lt 小于
  5. -ge 大于或等于
  6. -le 小于或等于
  7. -ne 不等于

字符串比较运算

         运算符解释,注意字符串一定别忘了使用引号引起来
         ==          等于   
         !=          不等于
         -n          检查字符串的长度是否大于0  
         -z          检查字符串的长度是否为0

文件比较与检查

         -d  检查文件是否存在且为目录
         -e  检查文件是否存在
         -f  检查文件是否存在且为文件
         -r  检查文件是否存在且可读
         -s  检查文件是否存在且不为空
         -w  检查文件是否存在且可写
         -x  检查文件是否存在且可执行
         -O  检查文件是否存在并且被当前用户拥有
         -G  检查文件是否存在并且默认组为当前用户组
         file1 -nt file2  检查file1是否比file2新
         file1 -ot file2  检查file1是否比file2旧

逻辑运算

          逻辑与运算       &&   
          逻辑或运算       ||  
          逻辑非运算      !
逻辑运算注意事项:
    逻辑与 或 运算都需要两个或以上条件,逻辑非运算只能一个条件。
    口诀:    逻辑与运算               真真为真 真假为假   假假为假
             逻辑或运算               真真为真 真假为真   假假为假
             逻辑非运算               非假为真   非真为假

赋值运算

         =      赋值运算符         a=10   name='baism'

if 语法

语法一: 单if语句

适用范围:只需要一步判断,条件返回真干什么或者条件返回假干什么。

语句格式

if [ condition ]           #condition 值为true or false
   then
      commands
fi

该语句翻译成汉语大意如下:

假如  条件为真
 那么
    执行commands代码块
结束

通过一段代码来演示一下吧,判断 当前用户是不是root,如果不是那么返回”ERROR: need to be root so that!“

实验代码

#!/bin/bash
if [[ ${USER} != "root" ]]
then
    echo "ERROR:need to be root so that"
    exit 1
fi

执行以下看看吧

if判断语句-shell流程控制 - 图1

语法二: if-then-else语句

适用范围:两步判断,条件为真干什么,条件为假干什么。

if [ condition ]
     then
          commands1
else
          commands2
fi

该语句翻译成汉语大意如下:

假如条件为真
  那么
        执行commands1代码块
否则
        执行commands2代码块
结束

通过一段代码演示一下吧,判断当前登录用户是管理员还是普通用户,如果是管理员输出”hey admin“ 如果是普通用户输出”hey guest“

实验代码

#!/bin/bash
if [[ ${USER} == "root" ]]
then
    echo "hey admin"
    else
        echo "hey ghost"
fi

执行结果

if判断语句-shell流程控制 - 图2

语法三: if-then-elif语句

适用范围:多于两个以上的判断结果,也就是多于一个以上的判断条件。

if [ condition 1]
     then
            commands1
elif [ condition 2]
     then
             commands2
  .......
else
            commandsX
fi

该语句翻译成汉语大意如下:

假如 条件1 为真
      那么
             执行代码块1
假如 条件2 为真
      那么
            执行代码块2
      以此类推的N个条件及对应的执行代码块
否则 【以上所有条件中没有一个满足的】
           执行代码块X
结束

通过一段代码演示一下吧,通过一个脚本,判断两个整数的关系。

实验代码

#!/bin/bash
if [[ $1 -gt $2 ]]; then
    echo "$1 > $2"
elif [[ $1 -eq $2 ]]; then
    echo "$1 = $2"
else
    echo "$1 < $2"
fi

执行结果

if判断语句-shell流程控制 - 图3

if 高级应用

1、条件符号使用双圆括号,可以在条件中植入数学表达式

通过代码来看下吧

#!/bin/bash
for (( ; ; )); do
    echo "hehe"
done

注意 双小圆括号中的比较运算符 使用的是我们传统的比较运算符 >,>=,==,<,<=,!=

2、使用双方括号,可以在条件中使用通配符

通过代码看下 ,为字符串提供高级功能,模式匹配 r* 匹配r开头的字符串

if判断语句-shell流程控制 - 图4

执行结果

if判断语句-shell流程控制 - 图5