一、整数运算
1.expr
expr 有语法格式 两数和操作符之间必须要有空格,当第一个数为空值时,计算不会报错,当最后一个为空值时会报错
不能进行求方运算,乘的操作符需要转义
案例
[root@xian /server/scripts]# Num1=10 [root@xian /server/scripts]# Num2=4 [root@xian /server/scripts]# expr $Num1 + $Num2 14 [root@xian /server/scripts]# expr $Num1 - $Num2 6 [root@xian /server/scripts]# expr $Num1 * $Num2 #*需要转义 expr: syntax error [root@xian /server/scripts]# expr $Num1 \* $Num2 40 [root@xian /server/scripts]# expr $Num1 / $Num2 2 [root@xian /server/scripts]# expr $Num1 % $Num2 2 [root@xian /server/scripts]# expr $Num1 ^ $Num2 expr: syntax error
2.$(())
没有严格的语法说明,不能求方 当第一个数为空值时,计算不会报错,当最后一个为空值时会报错
案例
[root@xian /server/scripts]# Num1=10 [root@xian /server/scripts]# Num2=4 [root@xian /server/scripts]# echo $(($Num1+$Num2)) 14 [root@xian /server/scripts]# echo $(($Num1-$Num2)) 6 [root@xian /server/scripts]# echo $(($Num1*$Num2)) 40 [root@xian /server/scripts]# echo $(($Num1/$Num2)) 2 [root@xian /server/scripts]# echo $(($Num1%$Num2)) 2
3.$[]
没有严格的语法说明,不能求方 当第一个数为空值时,计算不会报错,当最后一个为空值时会报错
案例
[root@xian /server/scripts]# Num1=10 [root@xian /server/scripts]# Num2=4 [root@xian /server/scripts]# [root@xian /server/scripts]# echo $[$Num1+$Num2] 14 [root@xian /server/scripts]# echo $[$Num1-$Num2] 6 [root@xian /server/scripts]# echo $[$Num1*$Num2] 40 [root@xian /server/scripts]# echo $[$Num1/$Num2] 2 [root@xian /server/scripts]# echo $[$Num1%$Num2] 2
4.let案例
[root@xian /server/scripts]# Num1=10 [root@xian /server/scripts]# Num2=4 [root@xian /server/scripts]# let Num3=$Num1+$Num2 [root@xian /server/scripts]# echo $Num3 14 [root@xian /server/scripts]# a=1 [root@xian /server/scripts]# let a++ [root@xian /server/scripts]# let a++ [root@xian /server/scripts]# let a++ [root@xian /server/scripts]# echo $a 4 [root@xian /server/scripts]# let a-- [root@xian /server/scripts]# echo $a 3 [root@xian /server/scripts]# let a-- [root@xian /server/scripts]# echo $a 2
二、小数运算
1.bc命令
[root@xian /server/scripts]# Num1=10 [root@xian /server/scripts]# Num2=4 [root@xian /server/scripts]# echo $Num1+$Num2 |bc 14 [root@xian /server/scripts]# echo $Num1-$Num2 |bc 6 [root@xian /server/scripts]# echo $Num1*$Num2 |bc 40 [root@xian /server/scripts]# echo $Num1^$Num2 |bc 1000 [root@xian /server/scripts]# echo $Num1%$Num2 |bc 2 [root@xian /server/scripts]# echo $Num1/$Num2 |bc 2 [root@xian /server/scripts]# Num2=3 [root@xian /server/scripts]# echo $Num1/$Num2 |bc #bc不支持小数 3 [root@xian /server/scripts]# echo "scale=2;$Num1/$Num2" |bc #需要加scale指定小数位 3.33 [root@xian /server/scripts]# echo "scale=9;$Num1/$Num2" |bc 3.333333333
2.awk简单计算
[root@xian /server/scripts]# awk 'BEGIN{print 10+3}' 13 [root@xian /server/scripts]# awk 'BEGIN{print 10-3}' 7 [root@xian /server/scripts]# awk 'BEGIN{print 10*3}' 30 [root@xian /server/scripts]# awk 'BEGIN{print 10%3}' 1 [root@xian /server/scripts]# awk 'BEGIN{print 10/3}' 3.33333 [root@xian /server/scripts]# Num1=9 [root@xian /server/scripts]# Num2=4 [root@xian /server/scripts]# awk 'BEGIN{print $Num1+$Num2}' #有$符合需要用双引号弱引用 0 [root@xian /server/scripts]# awk "BEGIN{print $Num1+$Num2}" 13 [root@xian /server/scripts]# awk -vNum1=14 -vNum2=6 'BEGIN{print Num1+Num2}' 20
3.python简单计算
[root@xian /server/scripts]# python Python 2.7.5 (default, Oct 30 2018, 23:45:53) [GCC 4.8.5 20150623 (Red Hat 4.8.5-36)] on linux2 Type "help", "copyright", "credits" or "license" for more information. >>> 14+3 17 >>> 10-4 6 >>> 13.0/3 4.333333333333333 >>> quit()
[root@xian /server/scripts]# Num1=11 [root@xian /server/scripts]# Num2=5 [root@xian /server/scripts]# echo "print $Num1+$Num2" |python 16 [root@xian /server/scripts]# echo "print $Num1-$Num2" |python 6 [root@xian /server/scripts]# echo "print $Num1*$Num2" |python 55 [root@xian /server/scripts]# echo "print $Num1/$Num2" |python 2 [root@xian /server/scripts]# echo "print ${Num1}.0/$Num2" |python 2.2
1.shell脚本代码
三、加减乘除计算脚本
[root@xian /server/scripts]# cat num.sh #!/bin/bash #################################### # File Name: num.sh # Time: 2020-04-22-11:22:01 # Author: lixian # Organization: www.lixian.fun #################################### #提示用户输入第一个数字 echo "整数加减乘除计算器:" read -p "请输入第一个数字:" Num1 expr 1 + $Num1 &>/dev/null if [ $? -eq 0 ];then echo -e "\033[42;37m您输入的数字符合规则\033[0m" else echo -e "\033[41;37m您输入的数字不符合整数,请重新输入\033[0m" exit fi #提示用户输入第二个数字 read -p "请输入第二个数字:" Num2 expr 1 + $Num2 &>/dev/null if [ $? -eq 0 ];then echo -e "\033[42;37m您输入的数字符合规则\033[0m" else echo -e "\033[41;37m您输入的数字不符合整数,请重新输入\033[0m" exit fi #输出结果 echo "$Num1 + $Num2 = $(($Num1+$Num2))" echo "$Num1 - $Num2 = $(($Num1-$Num2))" echo "$Num1 * $Num2 = $(($Num1*$Num2))" echo "$Num1 ÷ $Num2 =" $(awk "BEGIN{print $Num1/$Num2}")
2.执行结果
四、打印系统信息
1.脚本代码
#!/bin/bash ############################################################## # File Name: status.sh # Time: 2020-04-22-12:39:39 # Author: lixian # Organization: www.lixian.fun ############################################################## System=$(cat /etc/redhat-release |awk -F ' ' '{print $1,$4}'| awk -F '.' '{print $1"."$2}') Kernel=$(hostnamectl|grep Kernel|awk -F ' ' '{print $3}' |cut -c 1-10) Vt=$(hostnamectl|grep Virtualization|awk '{print $2}') Statichostname=$(hostnamectl|grep "Static hostname"|awk '{print $3}') Eth0=$(ifconfig eth0|awk 'NR==2{print $2}') Lo=$(ifconfig lo|awk 'NR==2{print $2}') Network_w=$(curl -s ifconfig.me) #输出系统信息 #当前系统版本 echo -e "\033[42;37m 当前系统版本是: $System \033[0m" #当前系统内核 echo -e "\033[42;37m 当前系统内核是: $Kernel \033[0m" #当前虚拟平台 echo -e "\033[42;37m 当前虚拟平台是: $Vt \033[0m" #当前静态主机名 echo -e "\033[42;37m 当前静态主机名是: $Statichostname \033[0m" #当前Eth0IP地址是 echo -e "\033[42;37m 当前Eth0IP地址是: $Eth0 \033[0m" #当前lo地址 echo -e "\033[42;37m 当前lo地址是: $Lo \033[0m" #当前外网地址 echo -e "\033[42;37m 当前外网地址是: $Network_w \033[0m"
2.执行结果
[root@xian /server/scripts]# sh status.sh 当前系统版本是: CentOS 7.6 当前系统内核是: 3.10.0-957 当前虚拟平台是: vmware 当前静态主机名是: xian 当前Eth0IP地址是: 10.0.0.99 当前lo地址是: 127.0.0.1 当前外网地址是: 223.104.35.193
五、简单案例
1.业务需求
需求描述:变量string=”Bigdata process is Hadoop, Hadoop is open source project”,执行脚本后,打印输出string变量,并给出用户以下选项:
#需求
1)打印string长度
2)删除字符串中所有的Hadoop
3)替换第一个Hadoop为Linux
4)替换全部Hadoop为Linux
用户请输入数字1|2|3|4,可以执行对应项的功能。
2.脚本代码
#!/bin/bash ############################################################## # File Name: string.sh # Time: 2020-04-22-12:13:18 # Author: lixian # Organization: www.lixian.fun ############################################################## String="Bigdata process is Hadoop, Hadoop is open source project" echo -e "\033[43;37m $String \033[0m" #定义菜单 cat<<EOF +-------------------------------+ | | | 1)打印string长度 | | | | 2)删除字符串中所有的Hadoop | | | | 3)替换第一个Hadoop为Linux | | | | 4)替换全部Hadoop为Linux | | | +-------------------------------+ EOF #提示用户安装要求操作 read -p "请输入数字1|2|3|4,可以执行对应选项的功能:" Num #判断用户输入的数字是否为数字 expr 1 + $Num &>/dev/null if [ $? -ne 0 ];then echo -e "\033[41;37m 您输入的字符不正确,请输入正整数! \033[0m" exit fi #执行操作 if [ $Num -eq 1 ];then echo -e "\033[42;37m String的长度为:${#String} \033[0m" exit elif [ $Num -eq 2 ];then echo "删除字符串中所有的Hadoop" echo -e "\033[42;37m ${String//Hadoop/} \033[0m" exit elif [ $Num -eq 3 ];then echo "替换第一个Hadoop为Linux" echo -e "\033[42;37m ${String/Hadoop/Linux} \033[0m" exit elif [ $Num -eq 4 ];then echo "替换全部Hadoop为Linux" echo -e "\033[42;37m ${String//Hadoop/Linux} \033[0m" exit else echo -e "\033[41;37m 您输入的数字不正确请输入1-4内的数字! \033[0m" fi