shell脚本知识梳理(二)test命令的条件

2018/12/6 posted in  shell脚本

算术运算

a=1;
b=2;
c=`expr ${a} + ${b}`;
d=`expr ${a} - ${b}`;
e=`expr ${a} \* ${b}`;
f=`expr ${a} / ${b}`;
echo $c;
echo $d;
echo $e;
echo $f;
a=1;
b=1;

if [ ${a} != ${b} ]
    then
    echo "a不相等b"
fi


if [ ${a} == ${b} ]; then
    echo "a相等b"
fi
a=100;
b=200;
val=`expr $a + $b`;//这个算是最标准的写法吧
echo $val;
a=100;
b=200;
val=$(expr $a + $b);
echo $val;
a=100;
b=200;
val=$[ $a + $b ];
echo $val;

特别说明,上述的拿到一个命令的输出值用一个变量去接收。可以有三种写法。但通常还是低一种写法
特别说明expr即运算表达式计算命令。在命令行里可以直接执行。实际上expr永远不止,运算表达式。里面也可以是关系表达式,逻辑表达式,字符串表达式。只不过shell的的运算比较弱,需要借助这个命令行工具来实现计算。

算术运算bc(浮点解决方案)

在做运算时,可以用expr也可以用bc计算器。bc实际是一个专门的命令。在脚本中,将其当做普通命令就可以了,即使用命令替换就可以得到结果。bc 的输入实际是一个表达式.

bc基本用法

bc计算器
数字,整数,浮点数
示例
直接在命令行输入:bc命令,然后进行计算
解释一下bc命令:在shell脚本语言中提示符下通过bc命令访问bc计算。相当于打开计算器。

quit退出计算器

  • bc 在脚本中的应用
val1=1.314;
val2=0.618;
val3=`echo "$val1 * $val2" | bc`;
val4=`echo "$val3 * $val2" | bc`;
echo $val4;
  • bc的输入重定向之打包计算
val=$(bc << fg
    options
    statements
    expression
    fg
)
val1=1.314;
val2=0.618;
val3=100;
val4=100;
val=$(bc << fg
    a=($val1 *$val2)
    b=($val3 *$val4)
    a * b
    fg
)
echo "val结果:${val}";

数值比较运算

特别说明
这里说的数值运算,布尔运算,逻辑运算,字符串比较运算,文件测试运算实际上都是test命令的条件参数,实际就是test 条件参数的返回结果,在分支语句中都是通过test来计算的。只不过为了简便,分支语句将test 用[] 等替换了。

-eq 检测两个数是否相等(equal);
-ne 检测两个数是否相等(not equal),不相等时返回true;
-gt  检测左边的数是否大于右边的数(greater)
-lt 小于
-elt 小于等于(equal or less than)

布尔运算

! 非运算
-O 或运算(or)
-a 与运算(and)
a=10;
b=20;
if [ $a != $b ]
    then
    echo "a 于b 不相等";
fi
if [ $a -lt 100 -a $b -gt 15 ]
    then
    echo "$a 小于100,并且$b 大于15";
fi

逻辑运算

&&逻辑且
||逻辑或

a=10
b=20

if [[ $a -lt 100 && $b -gt 100 ]]
then
   echo "返回 true"
else
   echo "返回 false"
fi

字符串运算符

= 两字符串是否相等,相等返回true
!= 两字符串是否相等,不相等返回true
-z 字符串长度是否为0(zero)
-n 字符串长度是否为0

文件测试运算符

屏幕快照 2018-12-06 11.47.58