shell脚本

回复 收藏
使用传参的方法写个脚本,实现加减乘除的功能。例如:  sh  a.sh  1   2      (脚本自带判断功能,判断参数为两个并且为整数)。
2014-11-30 12:08 举报
已邀请:
0

coffee

赞同来自:

本帖最后由 coffee 于 2014-12-2 14:43 编辑

{:5_121:}

  1. #!/bin/bash
  2. #by coffee
  3. number=`echo "$@"`
  4. int1=`echo $number |awk '{print$1}'`
  5. int2=`echo $number |awk '{print$2}'`

  6. sum(){
  7. plus=$(($int1+$int2))
  8. minus=$(($int1-$int2))
  9. multiply=$(($int1 * $int2))
  10. divide=$(($int1 / $int2))

  11. echo "$int1+$int2=$plus"
  12. echo "$int1-$int2=$minus"
  13. echo "$int1*$int2=$multiply"
  14. echo "$int1/$int2=$divide"
  15. }


  16. if [ $# == 2 ]
  17. then
  18.     if [[ -z ${int1//[0-9]} ]] && [[ -z ${int2//[0-9]} ]]
  19.     then
  20.         sum
  21.     else
  22.         echo "Non-integer"
  23.         exit
  24.     fi
  25. else
  26.     echo "Not two parameters"
  27.     exit
  28. fi


0

649969462

赞同来自:

{:4_114:} 传参的方法?
0

王肖强

赞同来自:

本帖最后由 王肖强 于 2014-12-1 11:53 编辑
  1. #!/bin/bash
  2. # Test script.
  3. # Writen by Wangxiaoqiang 2014-12-01.

  4. if [ $# -ne 2 ]
  5.   then
  6.       echo "Usage : $0 int1 int2 "
  7.       exit 1
  8.   else
  9.       echo $1 | grep -Po '^[\d]+
  10. {:4_102:} > /dev/null
  11.       if [ $? -ne 0 ];then
  12.         echo "'$1' not is integer ."
  13.         exit 2
  14.       fi
  15.       echo $2 | grep -Po '^[\d]+
  16. {:4_102:} > /dev/null
  17.       if [ $? -ne 0 ];then
  18.         echo "'$2' not is integer ."
  19.         exit 3
  20.       fi
  21. fi

  22. a=`expr $1 + $2`
  23. b=`expr $1 - $2`
  24. c=`expr $1 \* $2`
  25. d=`expr $1 / $2`

  26. echo "$1 + $2 = $a "
  27. echo "$1 - $2 = $b "
  28. echo "$1 * $2 = $c "
  29. echo "$1 / $2 = $d "
正则是这样子: grep -Po '^[\d]+$' > /dev/null  上面把 $' 自动给替换了。坑
{:4_102:}
0

t236xuchunfang

赞同来自:

王肖强 发表于 2014-12-1 11:49
正则是这样子: grep -Po '^[\d]+$' > /dev/null  上面把 $' 自动给替换了。坑

你的答案是错的,你验证了吗?还有你最后那个是什么意思?
0

王肖强

赞同来自:

t236xuchunfang 发表于 2014-12-1 15:20
你的答案是错的,你验证了吗?还有你最后那个是什么意思?

我没大明白你这个结果要什么 ?
你是想输入后直接计算出 加 减 乘 除 的结果吗 ?
还是想用户来选择计算方式 ,是加 是减 是乘 亦或是 除 ?
我那个可以一次性算出来 加 减 乘 除 的结果。因为是你要求的是输入整数,所以没有处理精度。除的结果不会显示精度。如 2 除 3 会显示 0 ,就这一个问题。
最后那一句话是说:脚本中的那条语句实际是那个样子 ,上传的时候 ,不知道为何被自动替换掉了,所以我补了一句 !
希望回答一下,争取能完善这个脚本。 thanks
0

t236xuchunfang

赞同来自:

王肖强 发表于 2014-12-1 17:19
我没大明白你这个结果要什么 ?
你是想输入后直接计算出 加 减 乘 除 的结果吗 ?
还是想用户来选择计 ...

你的脚本是显示不用以交互方式输入的,直接在执行脚本的时候输入两个,例如sh qq.sh 1 2然后出现结果是
[root@localhost ~]# sh nn.sh  1 2
1-2 =-1
1+2 =3
1*2 =2
1/2 =0
1**2 =1
1%2 =1,但是你的执行没有这个结果。
你试着做吧,要答案和我说。
0

一起营销

赞同来自:

#!/bin/bash

####    Scripts Name:calculator.sh
####    My Blog:http://laowang.me

function print_good () {
    echo -e "\x1B[01;32m[+]\x1B[0m $1"
}

function print_error () {
    echo -e "\x1B[01;31m[-]\x1B[0m $1"
}

function print_info () {
    echo -e "\x1B[01;34m
  • \x1B[0m $1"
    }

    if [ "$#" != "2" ]; then
        print_error "请输入两个正整数,两个数字以空格隔开。"
        print_info "比如这样:5 5"
        exit
    else
        if [[ "$*" = *.* ]]; then
            print_error "不能含有小数点,只能是正整数"
            print_info "比如这样:5 5"
            exit
        else
            presult=$(($1+$2))
            sresult=$(($1-$2))
            mresult=$(($1*$2))
            dresult=$(($1/$2))

            print_good "+: $1 + $2 = $presult"
            print_good "-: $1 - $2 = $sresult"
            print_good "*: $1 * $2 = $mresult"
            print_good "/: $1 / $2 = $dresult"
        fi
    fi
  • 0

    loveyouhyf

    赞同来自:

    #!/bin/bash
    ##filename:suanshu.sh
    ##使用传参的方法写个脚本,实现加减乘除的功能。例如:  sh  a.sh  1   2      (脚>本自带判断功能,判断参数为两个并且为整数)。
    ##write by 2016-01-21
    if [ $# -eq 2 ];then
       p1=`echo "$1"|sed 's/[0-9]//g'`
       p2=`echo "$2"|sed 's/[0-9]//g'`
       if [ -z "$p1" ]||[ "$p1" == "-" ]&&[ -z "$p2" ]||[ "$p2" == "-" ];then
       aa=$[$1+$2]
       bb=$[$1*$2]
       cc=$[$1-$2]
       dd=$[$1/$2]
       echo "$1 与 $2 的和为:$aa ; 差为:$cc ; 乘为:$bb ; 除为:$dd"
       else
       echo "$1 或 $2 不是整数"
       fi
    else
      echo "参数不是2个!"
    fi
    0

    lyhabc

    赞同来自:

    #!/bin/bash
    if [ ! -z $1 ] && [ ! -z $2 ] && [ $# -eq 2 ]
    then
            echo "have two parameter"
    else
            echo "parameter wrong"
            exit 1
    fi

    n1=$(echo $1|sed 's/[0-9]//g')
    n2=$(echo $2|sed 's/[0-9]//g')

    if [  -z $n1 ] && [  -z $n2 ]
    then
            sum=$(($1+$2))
            minu=$(($1-$2))
            multi=$(($1*$2))
            divid=$(($1/$2))
            echo "sum is $sum"
            echo "minu is $minu"
            echo "multi is $multi"
            echo "divid is $divid"
           
    else
            echo "not a number"
            exit 1
    fi

    回复帖子,请先登录注册

    退出全屏模式 全屏模式 回复
    评分
    可选评分理由: