[英]UNIX: How do I make my script return the sum of the numbers passed to it from the command line?
这是我当前的代码:
for i do
sum=$(expr $sum + $i)
done
echo =$sum
现在可以使用,但是我希望它显示所有数字。 例如,如果我输入./sum 1 2 3,我希望它显示1 + 2 + 3 = 6。 现在,它仅显示答案。 另外,有没有一种方法可以在没有./的情况下执行文件。 例如,我可以使用sum 1 2 3代替./sum 1 2 3吗?我试过chmod 700“ myfile”,但这似乎不起作用。
那这个呢?
while (( $# > 1 )); do
printf "$1 + "
sum=$((sum + $1 ))
shift
done
echo "$1 = $((sum + $1))"
它遍历您提供的参数,并将其添加到变量$sum
。 出于风格上的目的,我使用printf
,最后使用echo
将所有内容放在同一行中。
这里解释了shift
的用法:
内置
shift
命令用于将位置参数“移位”给定数字n或1(如果未给出数字)。
$ sh script.sh 1 2 3
1 + 2 + 3 = 6
$ sh script.sh 1 2 3 4 5
1 + 2 + 3 + 4 + 5 = 15
您可以使用IFS
和$*
将所有参数与+
结合在一起:
(IFS="+"; printf '%s' "$*")
sum=0
for i; do
sum=$((sum + i))
done
printf '=%d\n' "$sum"
要在没有./
前缀的情况下运行,您需要将程序放在PATH
中显示的目录中。 除非这不是给您使用的,否则您应该在主目录中创建一个bin
目录,然后将其添加到.bash_profile
:
PATH=~/bin/:$PATH
以便将bin
目录添加到查找命令的位置列表中。
另一个答案:
sum=0
for i in $@
do
sum=$(($sum + $i))
done
echo $sum
这里是没有循环的解决方案:
numbers=$( printf -v str '%s+' $@; printf '%s' "${str%+}" )
sum=$(( $numbers ))
echo $numbers=$sum
第一行将输入参数与+相连,第二行计算总和,第三行输出等式
至于问题的第二部分。 只需将脚本放在路径中的某个位置即可(例如/ usr / local / bin)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.