我正在尝试为类编写我的第一个shell脚本。目标是将整数列表作为命令行参数,并显示它们的正方形和平方和。我收到一个错误,没有找到参数。
这是给出错误的部分:找不到参数:
sumsq=0 #sum of squares
int=0 #Running sum initialized to 0
count=0 #Running count of numbers passed as arguments
while [ $# != 0 ]
do
numbers[$int]=`expr $1` #Assigns arguments to integers
let square=`expr $1*$1` #Operation to square arguments
squares[$int]=$square #Calc. square of each argument
sumsq=`expr $sumsq + $square` #Add square to total
count=`expr $count + 1` #Increment count
shift #Remove the used argument
int=`expr $int + 1` #Increment to next argument
done
我正在使用破折号外壳。
答案 0 :(得分:0)
Dash不支持数组,Bash不支持。
如果您以交互方式运行脚本,可能没有将bash配置为默认shell,请在尝试之前运行bash
。
如果您是从控制台运行它:
bash script.sh
如果您使用其路径运行它(例如./script.sh
),请确保脚本的第一行是:
#!/bin/bash
而不是:
#!/bin/sh
答案 1 :(得分:0)
您似乎是bash初学者,一些开始学习的好指点:
常见问题解答:http://mywiki.wooledge.org/BashFAQ
指南:http://mywiki.wooledge.org/BashGuide
参考:http://www.gnu.org/software/bash/manual/bash.html
http://wiki.bash-hackers.org/
http://mywiki.wooledge.org/Quotes
检查您的脚本:http://www.shellcheck.net/
并且避免人们说使用tldp.org
网站学习,tldp bash指南已经过时,在某些情况下只是完全错误。
您的代码中有许多内容可以改进。尽快更好地学习好方法。你的代码看起来是80's =)
更正严格的修正版本(未经测试):
sumsq=0 #sum of squares
int=0 #Running sum initialized to 0
count=0 #Running count of numbers passed as arguments
while (($# != 0 )); do
numbers[$int]=$1 #Assigns arguments to integers array
square=$(($1*$1)) #Operation to square argument first arg by itself
squares[$int]=$square #Square of each argument
sumsq=$((sumsq + square)) #Add square to total
count=$((count++)) #Increment count
shift #Remove the used argument
done