如何转换以下 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
备注:
构造 $*
returns 脚本的所有参数由变量 IFS
中的第一个字符分隔。默认情况下,IFS 中的第一个字符是空白 space,因此,例如:
$ echo "$*"
2 4 2 8
但是,我们要表示加法,所以设置IFS=+
。因此:
$ ( IFS=+; echo "$*" )
2+4+2+8
后者现在的形式适合 bc
:
$ ( IFS=+; echo "$*" | bc )
16
因为上面使用了bc
,所以既可以做浮点数,也可以做整数加法。
括号 (...)
用于创建子 shell。对于显示的简单脚本,这不是必需的。如果实际脚本更复杂,那么将更改保存在 IFS
本地可能会有好处。
备选
考虑这个脚本:
$ cat sum2
#!/bin/sh
( IFS=+; echo $(( $* )) )
示例:
$ ./sum2 1 2 4
7
此方法使用 bash 的算法 $((...))
来进行限制为整数的计算。
#!/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
备注:
构造
$*
returns 脚本的所有参数由变量IFS
中的第一个字符分隔。默认情况下,IFS 中的第一个字符是空白 space,因此,例如:$ echo "$*" 2 4 2 8
但是,我们要表示加法,所以设置
IFS=+
。因此:$ ( IFS=+; echo "$*" ) 2+4+2+8
后者现在的形式适合
bc
:$ ( IFS=+; echo "$*" | bc ) 16
因为上面使用了
bc
,所以既可以做浮点数,也可以做整数加法。括号
(...)
用于创建子 shell。对于显示的简单脚本,这不是必需的。如果实际脚本更复杂,那么将更改保存在IFS
本地可能会有好处。
备选
考虑这个脚本:
$ cat sum2
#!/bin/sh
( IFS=+; echo $(( $* )) )
示例:
$ ./sum2 1 2 4
7
此方法使用 bash 的算法 $((...))
来进行限制为整数的计算。