我在更新变量值时遇到问题,如下所示: 主要内容:
#!/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))就是问题所在。 :( 请问有什么消息吗?
答案 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}"