如何将下面的shell脚本转换为更多的命令行输入参数。

时间:2016-08-09 05:54:47

标签: shell command-line-arguments

#!/bin/bash
a=${2}
b=${1}
let "c=b+a"
echo $c

脚本使用commad ./scriptname arg1 arg2执行 其中arg1和arg2是在运行脚本时传递的整数类型。

1 个答案:

答案 0 :(得分:2)

要总结任意数量的参数,请考虑以下脚本:

$ cat ./sum
#!/bin/sh
( IFS=+; echo "$*" | bc ; )

例如:

$ ./sum 2 4
6
$ ./sum 2 4 2 8
16

注意:

  1. 构造$*返回脚本的所有参数,由变量IFS中的第一个字符分隔。默认情况下,IFS中的第一个字符是空格,因此,例如:

    $ echo "$*"
    2 4 2 8
    

    但是,我们想要指出添加,所以我们设置IFS=+。因此:

    $ ( IFS=+; echo "$*" )
    2+4+2+8
    

    后者现在采用适合bc的形式:

    $ ( IFS=+; echo "$*" | bc )
    16
    
  2. 因为上面使用了bc,所以它可以用于浮点数和整数加法。

  3. parens (...)用于创建子shell。对于显示的简单脚本,这不是必需的。如果实际脚本更复杂,那么将更改保留在IFS本地可能是有利的。

  4. 替代

    考虑这个脚本:

    $ cat sum2
    #!/bin/sh
    ( IFS=+; echo $(( $* )) )
    

    示例:

    $ ./sum2 1 2 4
    7
    

    这种方法使用bash的算术$((...))来进行将其限制为整数的计算。