记录一下今天做的linux大作业其中的一个作业
题目要求:编写shell脚本,实现两个变量之间的加减乘除运算
注:以下代码为shell脚本内的代码
1 #! /bin/bash 2 echo "please enter first number:" 3 read number1; 4 if [ -z `echo "$number1" | sed 's/[0-9][0-9]*//g'` ] ;then #此处为判断输入的变量是否为数字,若是,则输入第二个变量 5 echo "please enter second number:" 6 read number2; 7 if [ -z `echo "$number2" | sed 's/[0-9][0-9]*//g'` ] ;then #与第四行同理 8 echo "number1+number2= $((number1+number2)) " 9 echo "number1-number2= $((number1-number2)) " 10 echo "number1*number2= $((number1*number2)) " 11 if [ $number2 -eq 0 ];then #进行一次判断,即除数不能为0 12 echo "number2=0,can't devide"; 13 else 14 num3=$(echo "scale=2;$number1/$number2"|bc) #考虑到除法会有小数的情况 这里借用bc进行浮点数运算,其中scale=2表示保留两位小数 15 echo "number1/number2 =$num3" 16 fi 17 else 18 echo "number2 is not a figure!"; 19 fi 20 else 21 echo "number1 is not a figure!"; 22 fi 23 exit 0
对脚本的简单讲解:
1.第四行
sed 's 表示对某些内容进行替换,具体的替换规则/[0-9][0-9]*//g需要拆开来看:
第一部分/[0-9][0-9]*表示即将被替换的内容,0-9表示数字,后面的星号表示占位符,即表示任意位数,第一部分的意思就是即将被替换的内容为数字
第二部分//g 表示替换的内容,和第一部分联合起来就是把数字替换为 /g 也就是空
第四行的整体意思是把收到的变量中的数字全部替换为空,若替换完以后变量变成了空,则表示原变量全部为数字,可以进行运算
若替换完以后变量不全为空,则表示原变量中存在非数字的部分,不可以进行运算,提示出错
2.第十四行
echo "scale=2;$number1/$number2"|bc 表示借助bc来计算number1除以number2 |表示将前一个命令的输出转化为后一个命令的输入,将echo的输出转化为bc工具的输入,即可实现计算
这个脚本并不是最终版本,明天的任务是把这个脚本进行函数化,即当第一个数字输入错误时可以重新进行输入