shell 脚本中未找到参数

Arguments not found in shell script

我正在尝试为 class 编写我的第一个 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 `     #Assigns arguments to integers
    let square=`expr *`     #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

我正在使用破折号 shell。

Dash 不支持数组,Bash 支持。

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

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

bash script.sh

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

#!/bin/bash

而不是:

#!/bin/sh

看来你是一个初学者,一些好的入门指南:

常见问题解答: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 年代的 =)


更正后的版本(未测试)bashy 做事方式:

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]=            #Assigns arguments to integers array
    square=$((*))           #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