shell开发基础 您所在的位置:网站首页 shell数值判断 shell开发基础

shell开发基础

2024-07-15 11:01| 来源: 网络整理| 查看: 265

shell开发基础 算数运算符⽤于数值计算的命令let命令实际脚本开发,检测nginx服务状态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 $((34)) 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


【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有