Shell编程2_运算符

 

目录

一、算数运算符

1.expr和let

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

二、关系运算符-数字

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

四、字符串运算符

五、文件测试运算符

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


Shell运算符

一、算数运算符

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

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

二、关系运算符-数字

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

示例:

#!/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

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

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

示例:

#!/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

逻辑运算符

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

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

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

四、字符串运算符

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

示例:

#!/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 中与文件操作非常常用

示例:

#!/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}"
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

swadian2008

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值