Shell脚本系列(三)

目录
  1. Shell脚本系列(一)
  2. Shell脚本系列(二)
  3. Shell脚本系列(三)
  4. Shell脚本系列(四)
  5. Shell脚本系列(五)
  6. Shell脚本系列(六)
  7. Shell脚本系列(七)
  8. Shell脚本系列(八)

1、运算符

  原生bash不支持简单的数学运算,但是可以通过其他命令来实现,例如 awk 和 expr,expr 最常用。expr 是一款表达式计算工具,使用它能完成表达式的求值操作。

1.0、expr命令

1.0.1、expr命令的注意点

1)expr 命令是一个用于对表达式进行求值并输出相应结果的命令行工具。它同样只支持整数运算,不支持浮点运算

2)与 let 命令相反,使用 expr 命令时,表达式中的运算符左右必须包含空格,如果不包含空格,将会输出表达式本身。

3)使用 expr 命令时,对于某些运算符,还需要我们使用符号“\”进行转义,否则就会提示语法错误

4)完整的表达式要被``包含,注意这个字符不是常用的单引号,在 Esc 键下边。

1.0.2、expr命令的等价写法

      1)`expr $a + $b`;

      2)$(($a+$b));

      3)$[ $a + $b ]

      当然了这里的变量替换成常量也是没有问题的。比如 $(($a+1))

1.1、算术运算符

    eg:下文中“echo -e 是为了换行”

#!/usr/bin/env bash
sum=`expr 2 + 2`;
echo "两数之和是${sum}";
echo -e;


a=20;
b=10;
c=0;
d=20;

echo "${a} + ${b} = `expr ${a} + ${b}`";

echo "${a} - ${b} = `expr ${a} - ${b}`";

echo "${a} * ${b} = `expr ${a} \* ${b}`";

echo "${a} / ${b} = `expr ${a} / ${b}`";

echo "${a} / ${c} = `expr ${a} / ${c}`";

echo "${a} % ${b} = `expr ${a} % ${b}`";


# 条件表达式要放在方括号之间,并且要有空格,
# 例如: [$a==$b] 是错误的,必须写成 [ $a == $b ]。
if [ $a == $b ]
then
    echo "${a} = ${b}";
else
    echo "${a} != ${b}";
fi
echo -e;


if [ $a != $c ]
then
    echo "${a} != ${c}";
else
    echo "${a} = ${c}";
fi
echo -e;


if [ $a != $d ]
then
    echo "${a} != ${d}";
else
    echo "${a} = ${d}";
fi
echo -e;

1.2、关系运算符

   关系运算符只支持数字,不支持字符串,除非字符串的值是数字。

    

EQ 就是 EQUAL等于

NE 就是 NOT EQUAL不等于 

GT 就是 GREATER THAN大于  

LT 就是 LESS THAN小于 

GE 就是 GREATER THAN OR EQUAL 大于等于 

LE 就是 LESS THAN OR EQUAL 小于等于

 

    eg:

#!/usr/bin/env bash

# -eq  :相等
# -ne  :不相等
# -gt  :左边大于右边
# -lt  :左边小于右边
# -ge  :左边大于等于右边
# -le  :左边小于等于右边

a=30

b=40

c=35

if [ $a -ge $b ]
then
    echo "大于"
else
    echo "小于"
fi

1.3、布尔运算符

 

    eg:

#!/usr/bin/env bash

#   ! 非
#   -o  或
#   -a  与

readonly a=10;
readonly b=20;

if [ $a != $b ]
then
    echo "$a != $b: a 不等于 b";
else
    echo "$a == $b: a 等于 b";
fi


if [ $a -lt 100 -a $b -gt 15 ]
then
    echo "$a 小于 100 且 $b 大于 15:返回true";
else
    echo "$a 小于 100 且 $b 大于 15:返回false";
fi


if [ $a -lt 100 -o $b -gt 100 ]
then
    echo "$a 小于 100 或 $b 大于 100:返回true";
else
    echo "$a 小于 100 或 $b 大于 100:返回false";
fi


if [ $a -lt 5 -o $b -gt 100 ]
then
    echo "$a 小于 5 或 $b 大于 100 :返回true";
else
    echo "$a 小于 5 或 $b 大于 100 :返回false";
fi


if [ $a -eq $b ]
then
    echo "$a = $b";
else
    echo "$a != $b";
fi


if [ ! $a -eq $b ]
then
    echo "$a != $b";
else
    echo "$a == $b";
fi

1.4、逻辑运算符

  eg:  

#!/usr/bin/env bash

# &&    逻辑and
# ||    逻辑or

readonly a=10;
readonly b=20;

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

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

1.5、字符串运算符

    eg:

#!/usr/bin/env bash

# = 检查两个字符串是否相等
# != 检查两个字符串是否不相等
# -z 检查字符串长度是否为0,为0返回true
# -n 检查字符串长度是否不为0,不为0返回true
# $ 检查字符串是否为空,不为空返回true

readonly a="abc";
readonly b="efg";

if [ $a = $b ]
then
    echo "${a}等于${b}";
else
    echo "${a}不等于${b}";
fi


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


if [ -z $a ]
then
    echo "${a}的长度为0";
else
    echo "${a}的长度不为0";
fi


if [ -n $b ]
then
    echo "${b}的长度不为0";
else
    echo "${b}的长度为0";
fi


if [ $a ]
then
    echo "${a}不为空";
else
    echo "${a}为空";
fi

1.6、文件测试运算符

   

    eg:

#!/usr/bin/env bash

# 下面这些属性需要掌握
# TODO
# -d file  检测文件是否是目录,如果是,则返回 true。
# -f file  检测文件是否是普通文件(既不是目录,也不是设备文件),如果是,则返回 true。

# -s file  检测文件是否不为空(文件大小是否大于0),不为空返回 true。
# -e file  检测文件(包括目录)是否存在,如果是,则返回 true。

# -r file  检测文件是否可读,如果是,则返回 true。
# -w file  检测文件是否可写,如果是,则返回 true。
# -x file  检测文件是否可执行,如果是,则返回 truefile="/var/ggtest/test.txt";
file1="/var/ggtest";
file_notExist="/var/ggtest/123.txt";


if [ -e $file ]
then
    echo "${file}该文件存在";
else
    echo "${file}该文件不存在";
fi


if [ -e $file_notExist ]
then
    echo "${file_notExist}该文件存在!";
else
    echo "${file_notExist}该文件不存在!";
fi


if [ -s $file ]
then
    echo "${file}该文件不为空";
else
    echo "${file}该文件为空";
fi


if [ -f $file ]
then
    echo "${file}该文件是一个普通文件";
else
    echo "${file}该文件不是一个普通文件";
fi


if [ -d $file ]
then
    echo "${file}是一个目录";
else
    echo "${file}不是一个目录";
fi


if [ -d $file1 ]
then
    echo "${file1}是一个目录";
else
    echo "${file1}不是一个目录";
fi


if [ -r $file ]
then
    echo "${file}该文件可读!";
else
    echo "${file}该文件不可读!";
fi


if [ -w $file ]
then
    echo "${file}该文件可写!";
else
    echo "${file}该文件不可写!";
fi


if [ -x $file ]
then
    echo "${file}该文件可执行!";
else
    echo "${file}该文件不可执行!";
fi

    

2、其他

   2.1、总结一下Shell里面的空格,啥时要有啥时不能有

  1)=两边不能加空格;
  2)if语句的方括号与判断条件之间一定要是两边都有空格;
  3)除了等号之外,其他运算符左右两侧都要有空格;

 

 

参考:https://www.runoob.com/linux/linux-shell.html

 

posted @ 2020-08-18 18:21  Erneste  阅读(101)  评论(0编辑  收藏  举报