如何转换以下 shell 脚本以获得更多命令行输入参数。

How to convert below shell script for more number of command line input arguments.

#!/bin/bash
a=
b=
let "c=b+a"
echo $c

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

要对任意数量的参数求和,请考虑以下脚本:

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

例如:

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

备注:

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

    $ echo "$*"
    2 4 2 8
    

    但是,我们要表示加法,所以设置IFS=+。因此:

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

    后者现在的形式适合 bc:

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

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

备选

考虑这个脚本:

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

示例:

$ ./sum2 1 2 4
7

此方法使用 bash 的算法 $((...)) 来进行限制为整数的计算。