如何在变量上添加参数?

时间:2016-03-15 19:53:20

标签: linux bash

我在更新变量值时遇到问题,如下所示: 主要内容:

#!/bin/bash

meniu()
{
        echo "Select operation: "
        echo -e "1 - add\n2 - bbb\n3 - ccc\n4 - ddd\n5 - eee\n"

        read input

        case $input in
            1)
            add $@
            echo "The result is: " $sum
            ;;
            2)
            scadere $@
            echo "fgh: " $diferenta
            ;;
            3)
            inmultire $@
            echo "fgh: " $produs
            ;;
            4)
            impartire $@
            echo "hfg: " $cat
            ;;
            5)
            modulo $@
            echo "fgh: " $rest
            ;;
            *)
            echo Execution finished!
            sleep 6
            return
            ;;
        esac
fi
}

meniu $@

功能脚本:

#!/bin/bash

add()
{
    n=$#
    sum=$1

    for (( i=2; i<=n; i++ ))
    do
        sum=$((sum + i))
    done
}

我只想获取add函数返回的结果并显示它。 脚本正在运行,但仅适用于某些值。我注意到当我使用参数1 1或小于我的数字(从2开始)时,添加变坏了。 我认为$((sum + i))就是问题所在。 :( 请问有什么消息吗?

1 个答案:

答案 0 :(得分:2)

我认为您使用了简单的测试输入,如1 2 3 4.您的添加功能不是使用您的参数(第一个除外)进行添加,而是循环变量i的值:

add()
{
    n=$#
    sum=$1

    for (( i=2; i<=n; i++ ))
    do
        sum=$((sum + i))
    done
}

add 1 2 3 4
echo "All seems well: sum=${sum}"
add 4 4 4
echo "I want 12, I got: sum=${sum}"

您要做的是取消引用变量:

add()
{
    n=$#
    sum=$1

    for (( i=2; i<=n; i++ ))
    do
        sum=$((sum + ${!i}))
    done
}

add 1 2 3 4
echo "All seems well: sum=${sum}"
add 4 4 4
echo "I want 12, I got: sum=${sum}"

我会选择其他解决方案,我会使用shift:

add()
{
    sum=0
    while [ $# -gt 0 ]; do
        sum=$((sum + $1))
        shift
    done
}

add 1 2 3 4
echo "All seems well: sum=${sum}"
add 4 4 4
echo "I want 12, I got: sum=${sum}"