如何从这个回声中提取数字到单独的变量?

时间:2013-10-11 15:33:25

标签: shell

很抱歉信息的位和信息 所以我正在编写一个普通的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脚本中?

由于

3 个答案:

答案 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`