Shell编程2_运算符

 

目录

一、算数运算符

1.expr和let

2.利用 [] 和 (()) 进行数值运算

二、关系运算符-数字

三、布尔运算符和逻辑运算符

四、字符串运算符

五、文件测试运算符

六、实例:统计一个文件系统路径下的目录和文件数量


Shell运算符

一、算数运算符

算术运算符顾名思义,其就是进行加减乘除数值运算,在 shell 中,bash 不支持原生的数学运算,需要利用第三方工具来如 letexpr 等来实现。

Shell编程2_运算符_第1张图片

1.expr和let

利用 let 对数值进行运算,let C=$A+$B, let 运算后需要将其赋值给一个变量。

[root@master ~]# A=1
[root@master ~]# B=2
[root@master ~]# let C=${A}+${B}
[root@master ~]# echo $C
3

利用 expr 对数组进行运算,C=$(expr $A+$B),例如:

[root@master ~]# C=`expr $A + $B`
[root@master ~]# echo $C
3

2.利用 [] 和 (()) 进行数值运算

利用 [] 来对数值进行运算,C=[A+B],例如:

[root@master ~]# C=$[$A+$B]
[root@master ~]# echo $C
3

利用 (()) 来对数值进行运算,C=$(($A+$B)),例如:

[root@master ~]# C=$(($A+$B))
[root@master ~]# echo $C
3

二、关系运算符-数字

关系运算顾名思义就是比较数字的大小,注意关系运算符作用的为数字,不能用其来比较字符串。

Shell编程2_运算符_第2张图片

示例:

#!/bin/bash

num1=1
num2=2

echo "num1 为:${num1}"
echo "num2 为: ${num2}"

if [ $num1 -eq $num2 ]
then
        echo "${num1} -eq ${num2} : num1 等于 num2"
else
        echo "${num1} -eq ${num2} : num1 不等于 num2"
fi

错误示例:比较对象为字符串

[root@localhost /]# sh compare_demo.sh 
num1 为:hello_java
num2 为: hello_java
compare_demo.sh: 第 10 行:[: hello_java: 期待整数表达式
hello_java -eq hello_java : num1 不等于 num2

三、布尔运算符和逻辑运算符

布尔运算符也就是我们常说的与或非,对于布尔运算和逻辑运算其实是一个东西,只不过布尔运算符有一个非运算

Shell编程2_运算符_第3张图片

示例:

#!/bin/bash
#

num1=10
num2=20

echo "num1 为:${num1}"
echo "num2 为: ${num2}"

if [ $num1 -lt 40 -a  $num2 -gt 15  ]
then
        echo "${num1} 小于 40 且  ${num2} 大于 15 : 返回 ture"
else
        echo "${num1} 小于 40 且  ${num2} 大于 15 : 返回 false"
fi

逻辑运算符

Shell编程2_运算符_第4张图片

如果需要在一个 test 中执行多个判断,需要使用 [[]], test 是 Shell 内置关键字,不是命令,免除函数传递过程,因此更加建议使用 [[]]。双中括号有以下注意事项:

  • 不需要把变量名用双引号 "" 包围起来,即使变量是空值,也不会出错;
  • 不需要、也不能对 >、< 进行转义,转义后会出错;
  • 其支持正则表达式,组合逻辑可以不使用 test 的 - a,-o 而使用 && ||。

与逻辑运算符号对应的 && 可以使用 -a|| 可以使用 -o 来替换。

四、字符串运算符

用于对于字符串进行一些判断操作

Shell编程2_运算符_第5张图片

示例:

#!/bin/bash
#

var1="java"
var2="shell"
var3=""

echo "var1 为:${var1}"
echo "var2 为: ${var2}"

if [ $var1 ==  $var2 ];then
        echo "${var1} = ${var2} : var1 等于 var2"
else
        echo "${var1} = ${var2} : var1 不等于 var2"
fi

if [ -n "${var3}" ];then
        echo "-n ${var3} : 字符串长度不为0"
else
        echo "-n ${var3} : 字符串长度为0"
fi

五、文件测试运算符

文件测试在我们编写 shell 中与文件操作非常常用

Shell编程2_运算符_第6张图片

Shell编程2_运算符_第7张图片

示例:

#!/bin/bash
#

TEST_FILE="/demo_test.sh"

echo "检测的文件为:${TEST_FILE}"
echo "文件信息为:$(ls -l ${TEST_FILE})"

if [ -r ${TEST_FILE} ];then
        echo "${TEST_FILE} : 文件可读"
else
        echo "${TEST_FILE} :文件不可读"
fi

六、实例:统计一个文件系统路径下的目录和文件数量

#!/bin/bash
#

#判断输入参数
[ $# -ne 1 ] && echo "输入参数错误,${0} check_dir" && exit 1

#判断输入的是否为存在的目录,不存在则退出
CHECK_DIR=$1

[ ! -d ${CHECK_DIR} ] && echo "检测系统不存在目录: ${CHECK_DIR},请输入正确的目录" && exit 1

#对目录文件进行统计
DIR_NUM=0
FILE_NUM=0
OTHER_NUM=0

for item in ${CHECK_DIR}/*
do
        if [ -d ${item} ];then
                # 如果为目录,目录总数+1
                DIR_NUM=$((${DIR_NUM}+1))
        elif [ -f ${item} ];then
                FILE_NUM=$((${FILE_NUM}+1))
        else
                OTHER_NUM=$((${OTHER_NUM}+1))
        fi
done

echo "检测目录为:${CHECK_DIR}"
echo "目录类型数量为:${DIR_NUM}"
echo "文件类型数量为:${FILE_NUM}"
echo "其他类型数量为:${OTHER_NUM}"

你可能感兴趣的:(Linux)