2016-03-15 127 views
0

我有更新变量的值如下问题: 主脚本:如何在变量上添加参数?

#!/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 [email protected] 
      echo "The result is: " $sum 
      ;; 
      2) 
      scadere [email protected] 
      echo "fgh: " $diferenta 
      ;; 
      3) 
      inmultire [email protected] 
      echo "fgh: " $produs 
      ;; 
      4) 
      impartire [email protected] 
      echo "hfg: " $cat 
      ;; 
      5) 
      modulo [email protected] 
      echo "fgh: " $rest 
      ;; 
      *) 
      echo Execution finished! 
      sleep 6 
      return 
      ;; 
     esac 
fi 
} 

meniu [email protected] 

中的作用SCRIPT:

#!/bin/bash 

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

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

我只想把由add函数返回的结果并显示它。 这些脚本正在工作,但仅用于某些值。我注意到,当我使用参数1 1或小于我的数字(它从2开始)时,添加会变得很糟糕。 我认为$((sum + i))是这里的问题。 :( 任何sugesstions请

+0

与问题无关,但使用'select'生成类似这样的菜单。 –

+0

“meniu”功能有问题吗?它根本不调用'add'函数。算术扩展中的'i'将成为位置参数*号*而不是其值。 –

+0

谢谢,Etan!我会仔细看看的! 你说得对。我的代码是用我的母语编写的,当我把翻译成英文的时候,我忘了给“添加”打电话,我为它做了“总结”,现在就可以了。 – Marko

回答

2

我觉得你使用简单的测试输入像1 2 3 4.你的add函数不是使用你的参数(除了第一个)添加,但循环变量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}" 
+0

我会尝试“sum = $((sum + $ {!i}))“明天,在我已经是00:30:D。 我不认为它是非常合适的,因为我有一些其他功能,如”减“等但我会调查“shift”选项。 谢谢你的时间,我会明天返回新闻!:D – Marko

+0

你的解决方案工作得很好,Walter,谢谢你! Shift功能也可以,但是从我的理解是,如果我使用转变,争论将被逐一取消,我计划要你之后再次选择它们,所以更好的解决方案是$ {!i}。 :d – Marko