Press "Enter" to skip to content

Shell运算与if结构

整数运算


基本运算类别

  • 四则运算;
  • 取余运算;

expr运算工具

计算指定的表达式,并输出

$[]算式替换

  • 使用$[] $(())
  • 引用变量可省略$
  • 计算结果替换表达式本身,echo输出

变量的自增、自减

  • let命令
  • 使用$(());

小数运算

整数运算的局限性

shell默认不支持小数运算

使用bc实现小数运算

  • bc
  • scale=n 约束小数位

小数值的比较

  • 管道
  • echo输出

条件测试

测试操作概述

脚本智能化

  • 脚本识别能力;
  • 识别依据;

测试操作

常见测试操作

整数值比较

  • -eq 等于 equl
  • -ne 不等于 Not equl
  • -ge 大于或者等于 Great or Equal
  • -le 小于或者等于 Lesser or Equal
  • -gt 大于 Greater Than
  • -lt 小于 Lesser Than

字符串比较

[ $(who|wc -l) -le 5 ] && echo "OK"
tips:
+ []外部前后不需要空格、内部前后需要空格;
+ echo后需要空格

文件状态测试

  • -e 对象是否存在
  • -d 是否为目录
  • -f 是否为一般文件
  • -r 是否有可读权限
  • -w 是否有可写权限
  • -x 是否有可执行权限

组合多个条件

逻辑分隔操作

  • && 逻辑与,给定条件必须全为真,否则结果为假;
  • || 逻辑或,给定条件只要有一个为真,则结果为真

条件组合应用

if选择结构


单分支结构

语法格式以及特点

if 条件测试
    then 命令序列
fi

if单分支的执行流程

脚本应用示例

shell
#!/bin/bash
mount_dir="/media/cdrom"
if[ !-d $mount_dir ];then
    mkdir -p $mount_dir
fi

双分支结构

语法格式以及特点

fi 条件测试
   then 命令序列1
    else 命令序列2
fi

if双分支的执行流程

脚本应用示例

#!/bin/bash
ping -c 3 -i 0.2 -W 3 $1 &>/dev/null
if[ $? -eq 0 ];then
    echo "Host $1 is up."
else
    echo "Host $1 is down."
fi

多分支结构

语法格式以及特点

if 条件测试
    then 命令序列1
elif 条件测试2
    then 命令序列2
    else 命令序列n
fi

if多分支的执行流程

脚本应用示例

示例:gradediv.sh

#!/bin/bash
read -p "请输入分数(0~100): " FS
if [ $FS -ge 85 ] && [ $FS -le 100 ];then
    ehco "$FS 分,优秀!"
elif [ $FS -ge 70 ] && [ $FS -le 84 ];then
    echo "$FS 分,合格!"
else
    echo "$FS 分,不合格!"
fi