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
看来你是一个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 年代的 =)
更正后的版本(未测试)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
我正在尝试为 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
看来你是一个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 年代的 =)
更正后的版本(未测试)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