跳转至

1 算术运算

1.1 分类

用于整数运算的

1. (())
2. let
3. expr
4. $[]

用于小数运算的

1. bc
2. awk

1.1.1 双小括号(())

1.案例

((i=i+1))

i=$((i+1))

((8>7&&5==5))

echo $((2+1))
ubuntu@4c16g:~$ i=1
ubuntu@4c16g:~$ echo $i
1
ubuntu@4c16g:~$ ((i=i+1))
ubuntu@4c16g:~$ echo $i
2
ubuntu@4c16g:~$ i=$((i+1))
ubuntu@4c16g:~$ echo $i
3

2.数值计算脚本

vim calculate.sh
#!/bin/bash
#说明:运行脚本,输入数1,输入运算符,输入数2,得到结果

#1.提示函数
print_usage(){
    printf "please enter an integer\n"
    exit 1
}

#2.接收值1
read -p "please input your number:" firstnum

#3.判断输入的是否是纯数字
if [ -n `echo $firstnum|sed 's/[0-9]//g'` ];then
    print_usage
fi

#4.接收运算符
read -p "please input an operator:" operator

#5.对运算符判断,只能输入加减乘除
if [  "${operator}" != "+"  ] &&  [  "${operator}" != "-"  ] &&  [  "${operator}" != "*"  ] &&  [  "${operator}" != "/"  ];then
    echo "only can input  +|-|*|/"
    exit 2
fi

#6.接收值2,并判断
read -p "please input second number:" secondnum
if [ -n `echo $secondnum|sed 's/[0-9]//g'` ];then
    print_usage
fi

#7.计算
echo "${firstnum}${operator}${secondnum}=$((${firstnum}${operator}${secondnum}))"

1.1.2 let命令

let i=i+2
echo $i

nginx服务检测脚本

#!/bin/bash

CheckUrl(){
    #1.定义变量
    timeout=5
    fails=0
    success=0
    #2.循环检测url
    while true
    do
        wget --timeout=${timeout} --tries=1 http://pythonav.cn -q -O /dev/null
        if [  $? -ne 0  ];then
            let fails=fails+1
        else
            let success+=1
        fi

        #success>=1,说明url没问题
        if [  $success -ge 1  ];then
            echo "this url's status is good"
            exit 0
        fi
        if [  ${fails} -ge 2  ];then
            echo "the url must be dead!!!"
            exit 1
        fi
    done    
}
#调用函数
CheckUrl

小知识:shift+% 可以快速找到另一半花括号{}

# 失败了!!!!!!!!!后面看完再回来改一下!
#!/bin/bash
# 加上$1
$url=$1
CheckUrl(){
    #1.定义变量
    timeout=5
    fails=0
    success=0
    #2.循环检测url
    while true
    do
        wget --timeout=${timeout} --tries=1 http://$1 -q -O /dev/null
        if [  $? -ne 0  ];then
            let fails=fails+1
        else
            let success+=1
        fi

        #success>=1,说明url没问题
        if [  $success -ge 1  ];then
            echo "this url's status is good"
            exit 0
        fi
        if [  ${fails} -ge 2  ];then
            echo "the url must be dead!!!"
            exit 1
        fi
    done    
}
#调用函数
CheckUrl

1.1.3 expr命令

1.实践

#注意:1.要有空格 2.最好加上反斜杠
expr 5 \+ 3
expr 5 \* 3
expr 5 \> 3

2.统计字符个数

#统计所有字符个数
expr 1234567 ":" ".*"
#统计到指定位置的字符个数
expr abc.def ":" ".*\.de"

3.统计字符串长度

expr length $var

4.判断文件名后缀脚本

vim is_jpg_file.sh

#!/bin/bash
if expr "$1" ":" ".*\.jpg" &> /dev/null;then
    echo "yes,this is *.jpg file"
else
    echo "no,this is not *.jpg file!!!"
fi
bash is_jpg_file.sh aaaaaaaaa.jpg

5.找出单词长度小于5的脚本

vim word_length.sh

#!/bin/bash
for str1 in I am yu chao,I teach you to learn linux.
    do
        if [  `expr length $str1` -lt 5  ];then
            echo $str1
        fi
    done

1.1.4 bc命令

yum install bc -y
echo "4.5*4"|bc
num=5
result=`echo $num*4`|bc
echo $result

1.计算1~1000的和

echo {1..100}|tr " " "+"|bc
echo $((`seq -s "+" 100`))
#注意:expr的参数必须有空格!!!
seq -s " + " 100 | xargs expr

1.1.5 awk计算

echo "1.1 2.2" | awk '{print $1+2*$2}'

1.1.6 中括号[]

num=5
res=$[num%4]
echo $res

最后更新: 2022-02-19 13:59:07