在shell脚本中找不到参数

时间:2015-01-04 02:41:15

标签: shell arguments dash-shell

我正在尝试为类编写我的第一个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

我正在使用破折号外壳。

2 个答案:

答案 0 :(得分:0)

Dash不支持数组,Bash不支持。

如果您以交互方式运行脚本,可能没有将bash配置为默认shell,请在尝试之前运行bash

如果您是从控制台运行它:

bash script.sh

如果您使用其路径运行它(例如./script.sh),请确保脚本的第一行是:

#!/bin/bash

而不是:

#!/bin/sh

答案 1 :(得分:0)

您似乎是初学者,一些开始学习的好指点:

常见问题解答: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