shell开发基础-数值计算和let命令和expr命令

算数运算符

在这里插入图片描述

运算符命令
在这里插入图片描述

Shell if参数

shell 编程中使⽤到得if语句内判断参数:
–b 当file存在并且是块⽂件时返回true
-c 当file存在并且是字符⽂件时返回true
-d 当pathname存在并且是⼀个⽬录时返回true
-e 当pathname指定的⽂件或⽬录存在时返回true
-f 当file存在并且是⽂件时返回true
-g 当由pathname指定的⽂件或⽬录存在并且设置了SGID位时返回为true
-h 当file存在并且是符号链接⽂件时返回true,该选项在⼀些⽼系统上⽆效
-k 当由pathname指定的⽂件或⽬录存在并且设置了“粘滞”位时返回true
-p 当file存在并且是命令管道时返回为true
-r 当由pathname指定的⽂件或⽬录存在并且可读时返回为true
-s 当file存在⽂件⼤⼩⼤于0时返回true
-u 当由pathname指定的⽂件或⽬录存在并且设置了SUID位时返回true
-w 当由pathname指定的⽂件或⽬录存在并且可执⾏时返回true。⼀个⽬录为了它的内容被访问必然是可执⾏的。
-o 当由pathname指定的⽂件或⽬录存在并且被⼦当前进程的有效⽤户ID所指定的⽤户拥有时返回true。

UNIX Shell ⾥⾯⽐较字符写法:
-eq 等于
-ne 不等于
-gt ⼤于
-lt ⼩于
-le ⼩于等于
-ge ⼤于等于
-z 空串
= 两个字符相等
!= 两个字符不等
-n ⾮空串

⽤于数值计算的命令

双括号(()) 效率极⾼,常⽤⽅法
在这里插入图片描述
案例:(注意必须是整数,双括号不⽀持浮点数,浮点数需要其他命令计算)

# 加减乘除
root@icloudy:~/shell_program# echo $((3+4))
7

root@icloudy:~/shell_program# echo $((5-3))
2

root@icloudy:~/shell_program# echo $((5*3))
15
root@icloudy:~/shell_program# echo $((5/3)) # 取商,除法
1

root@icloudy:~/shell_program# echo $((5**2))
25

root@icloudy:~/shell_program# echo $((7%4)) # 取余数,取模计算
3

# 变量计算
root@icloudy:~/shell_program# ((i=5))
root@icloudy:~/shell_program# ((i=i*i))
root@icloudy:~/shell_program# echo $i
25

# 复杂数学运算
root@icloudy:~/shell_program# ((a=2+2**3-4%3))
root@icloudy:~/shell_program# echo $a
9

# 变量定义在括号外,写法2
root@icloudy:~/shell_program# b=$((2+2**3-4%3))
root@icloudy:~/shell_program# echo $b
9

# 不⽤变量赋值,直接看结果,⼀定记得⽤$符号
root@icloudy:~/shell_program# echo $((2+2**3-4%3))
9

#结果判断,真假值,1为真,0位假
root@icloudy:~/shell_program# echo $((3<4))
1

root@icloudy:~/shell_program# echo $((3>4))
0

root@icloudy:~/shell_program# echo $((3==4))
0

特殊运算符
++ 加⼀

– 减⼀ 注意这⾥有坑

++a 是先计算加⼀,然后赋值a a++ 是先对变量a操作,再加⼀ 注意这个先后顺序

root@icloudy:~/shell_program# a=5
root@icloudy:~/shell_program# echo $((++a)) # 这是先对a变量,加⼀,然后再赋值
6

root@icloudy:~/shell_program# echo $a
6

# 先打印,再赋值
root@icloudy:~/shell_program# echo $((a++))
6
root@icloudy:~/shell_program# echo $a
7

案例:对⽤户输⼊判断是否是整数的脚本
利⽤read命令,获取⽤户输⼊

# [-n string] or [string] “string”的⻓度为⾮零non-zero则为真 
# -p 后⾯跟提示信息,即在输⼊前打印提示信息。
# 状态码不为0 就是表示有错误

root@icloudy:~/shell_program# vim is_int.sh
root@icloudy:~/shell_program# cat is_int.sh

#!/bin/bash

print_usage(){
   printf "Please enter an integer\n"

    exit 1

}

# 接受⽤户输⼊
read -p "Please input first number: " firstnum

# 如果⽤户输⼊,去掉了整数部分,为空,说明是⼀个纯数字
# if的-n参数,如果 string ⻓度⾮零,则为真
# 如果该字符串不为空,那么if逻辑成⽴,说明⽤户输⼊的不是⼀个纯数字
# 逻辑判断,限制⽤户必须输⼊⼀个纯数字
if [ -n "`echo $firstnum|sed 's/[0-9]//g'`" ];then
   print_usage

fi

read -p "Please input the operators: " operators

# 判断运算符
if [ "${operators}" != "+" ] && [ "${operators}" != "-" ] && [ "${operators}" != "*" ] && [ "${operators}" != "/" ];then
    echo  "Please use {+|-|*|/}"

    exit 2

fi

# 输⼊第⼆个数字
read -p "Please input second number: " secondnum

if [ -n "`echo $secondnum|sed 's/[0-9]//g'`" ];then
   print_usage

fi

# 最后数值计算
echo "${firstnum}${operators}${secondnum}结果是:$((${firstnum}${operators}${secondnum}))"

执⾏脚本

root@icloudy:~/shell_program# bash is_int.sh
Please input first number: 1
Please input the operators: +
Please input second number: 5
1+5结果是:6

⼀个简单的玩法,直接对⽤户输⼊计算

root@icloudy:~/shell_program# cat jisuan.sh
#!/bin/bash
echo $(($1))

root@icloudy:~/shell_program# bash jisuan.sh 3+4
7

root@icloudy:~/shell_program# bash jisuan.sh "3*4"
12

let命令

let命令等同于双括号计算, “((赋值表达式))”
但是双括号效率更⾼

root@icloudy:~/shell_program# # 计算变量相加
root@icloudy:~/shell_program# i=2
root@icloudy:~/shell_program# i=i+8
root@icloudy:~/shell_program# echo $i
i+8

root@icloudy:~/shell_program# unset i
root@icloudy:~/shell_program# i=2
root@icloudy:~/shell_program# let i=i+8
root@icloudy:~/shell_program# echo $i
10

# 上述等同于
root@icloudy:~/shell_program# i=2
root@icloudy:~/shell_program# echo $((i=i+8))
10

实际脚本开发,检测nginx服务状态

root@icloudy:~/shell_program# cat check_nginx_status.sh
#!/bin/bash
# 定义功能函数
CheckUrl(){
timeout=5
fails=0
success=0
while true
    do
        wget --timeout=$timeout --tries=1 http://pythonav.cn/ -q -O /dev/null

        # 如果上述状态码不等于0,表示出错
        if [ $? -ne 0 ]
            then
                let fails=fails+1 # 失败错误次数+1
        else
                let success+=1
        fi

        if [ $success -ge 1 ]
            then
                   echo "It's success."
                   exit 0
        fi
        
        # 如果出错次数⼤于2,报警
        if [ $fails -ge 2 ];then
            echo "该⽹站⼀定是挂了,超哥快去检查下你的服务器!"
            exit 2
        fi
done
}
CheckUrl

expr命令

expr命令允许在命令⾏处理数学表达式,简单的计算器命令
查看帮助

expr --help
# 注意参数之间必须有空格
root@icloudy:~/shell_program# expr 1 + 5
6
# expr并不是很好⽤,⽐较麻烦

# 很多符号在shell⾥有特殊含义因此必须得转义使⽤

root@icloudy:~/shell_program# expr 5 * 2
expr: syntax error
root@icloudy:~/shell_program# expr 5 \* 2
10
# 求⻓度

root@icloudy:~/shell_program# expr length 123132134524asdqweqweqewqfgdfgdfgdf
35
# 逻辑判断,必须加上引号
root@icloudy:~/shell_program# expr 33 '>' 3
1
root@icloudy:~/shell_program# expr 33 '>' 333
0

# 除法
root@icloudy:~/shell_program# expr 50 / 5
10
  • 4
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值