很抱歉信息的位和信息 所以我正在编写一个普通的shell脚本程序 所以如果使用输入
echo 1 3, .... | sh get_number
我必须将由echo的空格分隔的数字拉为
var1 = 1,var2 = 3等
我试过
#!/bin/sh
sum=0
for i in $*
do
sum=`expr $sum + $i`
done
avg=`expr $sum / $n`
echo Average=$avg
但不起作用....
我在这里读一读吗?
我也该怎么办
sh get_number <file1>, <file2>...
抓住他们中的数字并加总
在shell脚本中?
由于
答案 0 :(得分:1)
听起来你正在寻找内置的read
shell:
% echo "1 2 3 4" | read a b stuff
% echo $b
2
% echo $stuff
3 4
答案 1 :(得分:1)
要修复您的代码:
for i in $*; do
sum=$(( sum + i ))
n=$(( n + 1 ))
done
echo "Average=$(( sum / n ))"
答案 2 :(得分:0)
#!/bin/sh
while [ $# -gt 0 ]; do
(( i++ ))
(( sum += $1 ))
shift
done
echo "Average=$(( sum/i ))"
注意:dash
失败,这是我能找到的最接近真实 sh
的shell。
从作为命令行参数传递的文件或从stdin读取的行读取值的示例:
add_to_sum() {
set $*
while [ $# -gt 0 ]; do
I=`expr $I + 1`
SUM=`expr $SUM + $1`
shift
done
}
I=0
SUM=0
if [ $# -gt 0 ]; then
# process any arguments on the command line
while [ $# -gt 0 ]; do
FILE=$1
shift
while read LINE; do
add_to_sum "$LINE"
done < "$FILE"
done
else
# if no arguments on the command line, read from stdin
while read LINE; do
add_to_sum "$LINE"
done
fi
# be sure not to divide by zero
[ $I -gt 0 ] && echo Average=`expr $SUM / $I`