最近脚本中总是需要计算,每次都用awk会比较麻烦,就把awk的加减乘除封装了下,每次调用直接source math.sh就可以了。
有些要点要指出,以免以后修改的时候忘记:
1、对两个数字进行判断是否为数字,使用awk进行匹配
2、对两个参数进行循环校验(写两次校验显得笨拙),需要使用变量的引用${!para}。
复制代码 代码如下:
#!/bin/bash
############################
#重写shell中基本数学运算+ - × /
#时间:2014-01-18
#邮箱:jianye_jia@163.com
#版本: version 1.0
#备注:目前只支持2位整数运算
############################
#####################
#function is_Digit()
#判断参数是否为数字
#支持浮点数
#只能传入一个参数
#是,返回1,否则返回0
######################
functionis_Digit()
{
ref=`echo$1 | awk'{print($0~/^[+-]"digit":"string"}'`
if[ "$ref"== "digit"];then
return0;
else
return1;
fi
}
###################
#function multiply()
#判断参数是否为数字
#并将两个参数相乘
#函数直接传入引用
#变量的变量的实现${!para}
#函数的返回值,不能像C一样return,
#需要打印输出,echo
###################
functionmul()
{
for(( i=1;i<3;i++ ))
do
pa="$i"
ifis_Digit ${!pa}
then
continue;
else
echo"$pa isn't a number";
return0;
fi
done
ref=`awk-vnum_a=$1 -vnum_b=$2 'BEGIN{printf "%d \n",num_a*num_b}'`;
echo$ref;
}
########################
#function div()
#检查参数,返回两个数字差
########################
functiondiv()
{
for(( i=1;i<3;i++ ))
do
pa="$i"
ifis_Digit ${!pa}
then
continue;
else
echo"$pa isn't a number";
return0;
fi
done
ref=`awk-vnum_a=$1 -vnum_b=$2 'BEGIN{printf "%d \n",num_a/num_b}'`;
echo$ref;
}
########################
#function add()
#检查参数,返回两个数字和
########################
functionadd()
{
for(( i=1;i<3;i++ ))
do
pa="$i"
ifis_Digit ${!pa}
then
continue;
else
echo"$pa isn't a number";
return0;
fi
done
ref=`awk-vnum_a=$1 -vnum_b=$2 'BEGIN{printf "%d \n",num_a+num_b}'`;
echo$ref;
}
########################
#function sub()
#检查参数,返回两个数字差
########################
functionsub()
{
for(( i=1;i<3;i++ ))
do
pa="$i"
ifis_Digit ${!pa}
then
continue;
else
echo"$pa isn't a number";
return0;
fi
done
ref=`awk-vnum_a=$1 -vnum_b=$2 'BEGIN{printf "%d \n",num_a-num_b}'`;
echo$ref;
}
###################
#function mul_f()
#判断参数是否为数字
#并将两个参数相乘
#函数直接传入引用
#变量的变量的实现${!para}
#函数的返回值,不能像C一样return,
#需要打印输出,echo
###################
functionmul_f()
{
for(( i=1;i<3;i++ ))
do
pa="$i"
ifis_Digit ${!pa}
then
continue;
else
echo"$pa isn't a number";
return0;
fi
done
ref=`awk-vnum_a=$1 -vnum_b=$2 'BEGIN{printf "%0.2f \n",num_a*num_b}'`;
echo$ref;
}
########################
#function div_f()
#检查参数,返回两个数字差
########################
functiondiv_f()
{
for(( i=1;i<3;i++ ))
do
pa="$i"
ifis_Digit ${!pa}
then
continue;
else
echo"$pa isn't a number";
return0;
fi
done
ref=`awk-vnum_a=$1 -vnum_b=$2 'BEGIN{printf "%0.2f \n",num_a/num_b}'`;
echo$ref;
}
########################
#function add_f()
#检查参数,返回两个数字和
########################
functionadd_f()
{
for(( i=1;i<3;i++ ))
do
pa="$i"
ifis_Digit ${!pa}
then
continue;
else
echo"$pa isn't a number";
return0;
fi
done
ref=`awk-vnum_a=$1 -vnum_b=$2 'BEGIN{printf "%0.2f \n",num_a+num_b}'`;
echo$ref;
}
########################
#function sub_f()
#检查参数,返回两个数字差
########################
functionsub_f()
{
for(( i=1;i<3;i++ ))
do
pa="$i"
ifis_Digit ${!pa}
then
continue;
else
echo"$pa isn't a number";
return0;
fi
done
ref=`awk-vnum_a=$1 -vnum_b=$2 'BEGIN{printf "%0.2f \n",num_a-num_b}'`;
echo$ref;
}
Shell,数学运算,自定义函数
免责声明:本站文章均来自网站采集或用户投稿,网站不提供任何软件下载或自行开发的软件! 如有用户或公司发现本站内容信息存在侵权行为,请邮件告知! 858582#qq.com
更新日志
- 小骆驼-《草原狼2(蓝光CD)》[原抓WAV+CUE]
- 群星《欢迎来到我身边 电影原声专辑》[320K/MP3][105.02MB]
- 群星《欢迎来到我身边 电影原声专辑》[FLAC/分轨][480.9MB]
- 雷婷《梦里蓝天HQⅡ》 2023头版限量编号低速原抓[WAV+CUE][463M]
- 群星《2024好听新歌42》AI调整音效【WAV分轨】
- 王思雨-《思念陪着鸿雁飞》WAV
- 王思雨《喜马拉雅HQ》头版限量编号[WAV+CUE]
- 李健《无时无刻》[WAV+CUE][590M]
- 陈奕迅《酝酿》[WAV分轨][502M]
- 卓依婷《化蝶》2CD[WAV+CUE][1.1G]
- 群星《吉他王(黑胶CD)》[WAV+CUE]
- 齐秦《穿乐(穿越)》[WAV+CUE]
- 发烧珍品《数位CD音响测试-动向效果(九)》【WAV+CUE】
- 邝美云《邝美云精装歌集》[DSF][1.6G]
- 吕方《爱一回伤一回》[WAV+CUE][454M]