linux shell 函数运算,shell实现数学运算函数

最近脚本中总是需要计算,每次都用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

######################

function is_Digit()

{

ref=`echo $1 | awk '{print($0~/^[+-]?[0-9]?*(\.[0-9]*)?$/)?"digit":"string"}'`

if [ "$ref" == "digit" ];then

return 0;

else

return 1;

fi

}

###################

#function multiply()

#判断参数是否为数字

#并将两个参数相乘

#函数直接传入引用

#变量的变量的实现${!para}

#函数的返回值,不能像C一样return,

#需要打印输出,echo

###################

function mul()

{

for (( i=1;i<3;i++ ))

do

pa="$i"

if is_Digit ${!pa}

then

continue;

else

echo "$pa isn't a number";

return 0;

fi

done

ref=`awk -v num_a=$1 -v num_b=$2 'BEGIN{printf "%d \n",num_a*num_b}'`;

echo $ref;

}

########################

#function div()

#检查参数,返回两个数字差

########################

function div()

{

for (( i=1;i<3;i++ ))

do

pa="$i"

if is_Digit ${!pa}

then

continue;

else

echo "$pa isn't a number";

return 0;

fi

done

ref=`awk -v num_a=$1 -v num_b=$2 'BEGIN{printf "%d \n",num_a/num_b}'`;

echo $ref;

}

########################

#function add()

#检查参数,返回两个数字和

########################

function add()

{

for (( i=1;i<3;i++ ))

do

pa="$i"

if is_Digit ${!pa}

then

continue;

else

echo "$pa isn't a number";

return 0;

fi

done

ref=`awk -v num_a=$1 -v num_b=$2 'BEGIN{printf "%d \n",num_a+num_b}'`;

echo $ref;

}

########################

#function sub()

#检查参数,返回两个数字差

########################

function sub()

{

for (( i=1;i<3;i++ ))

do

pa="$i"

if is_Digit ${!pa}

then

continue;

else

echo "$pa isn't a number";

return 0;

fi

done

ref=`awk -v num_a=$1 -v num_b=$2 'BEGIN{printf "%d \n",num_a-num_b}'`;

echo $ref;

}

###################

#function mul_f()

#判断参数是否为数字

#并将两个参数相乘

#函数直接传入引用

#变量的变量的实现${!para}

#函数的返回值,不能像C一样return,

#需要打印输出,echo

###################

function mul_f()

{

for (( i=1;i<3;i++ ))

do

pa="$i"

if is_Digit ${!pa}

then

continue;

else

echo "$pa isn't a number";

return 0;

fi

done

ref=`awk -v num_a=$1 -v num_b=$2 'BEGIN{printf "%0.2f \n",num_a*num_b}'`;

echo $ref;

}

########################

#function div_f()

#检查参数,返回两个数字差

########################

function div_f()

{

for (( i=1;i<3;i++ ))

do

pa="$i"

if is_Digit ${!pa}

then

continue;

else

echo "$pa isn't a number";

return 0;

fi

done

ref=`awk -v num_a=$1 -v num_b=$2 'BEGIN{printf "%0.2f \n",num_a/num_b}'`;

echo $ref;

}

########################

#function add_f()

#检查参数,返回两个数字和

########################

function add_f()

{

for (( i=1;i<3;i++ ))

do

pa="$i"

if is_Digit ${!pa}

then

continue;

else

echo "$pa isn't a number";

return 0;

fi

done

ref=`awk -v num_a=$1 -v num_b=$2 'BEGIN{printf "%0.2f \n",num_a+num_b}'`;

echo $ref;

}

########################

#function sub_f()

#检查参数,返回两个数字差

########################

function sub_f()

{

for (( i=1;i<3;i++ ))

do

pa="$i"

if is_Digit ${!pa}

then

continue;

else

echo "$pa isn't a number";

return 0;

fi

done

ref=`awk -v num_a=$1 -v num_b=$2 'BEGIN{printf "%0.2f \n",num_a-num_b}'`;

echo $ref;

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值