2013-10-09 6 views
2

Является ли это правильным синтаксисом для параметризованных функций?Использование функций в bash

#!/bin/bash 

twoPow() 
{ 
    prod=1 
    for((i=0;i<$1;i++)); 
    do 
     prod=$prod*2 
    done 
    return prod 
} 

echo "Enter a number" 
read num 
echo `twoPow $num` 

Выход:

Баш sample.sh

Введите номер

sample.sh: линия 10: возвращение: прод: числовой аргумент требуется

Часть 2: Я удалил возврат, но что мне делать, если я хочу запускать несколько раз и хранить результаты, как показано ниже. Как я могу сделать эту работу?

#!/bin/bash 

tp1=1 
tp2=1 

twoPow() 
{ 
    for((i=0;i<$1;i++)); 
    do 
     $2=$(($prod*2)) 
    done 
} 

twoPow 3 tp1 
twoPow 2 tp2 
echo $tp1+$tp2 
+0

изменение возврата продукта для эха $ prod и повторной попытки. ссылка: http://stackoverflow.com/questions/8742783/returning-value-from-called-function-in-shell-script –

ответ

4

В сценариях bash вы не можете возвращать значения вызывающему коду.

Самый простой способ эмулировать «возврат» значения, как на других языках, - это установить глобальную переменную для предполагаемого результата.

К счастью, в bash все переменные глобальны по умолчанию. Просто попробуйте вывести значение prod после вызова этой функции.

+1

Это работает: '#/бен/Баш прод = 1 twoPow() { \t for ((i = 0; i <$ 1; i ++)); \t сделать \t \t тычок = $ (($ прод * 2)) \t сделано } эхо "Введите число" чтения Num twoPow $ Num эхо $ prod' – codepk

+0

Что я должен делать, если я хочу вызвать его несколько раз и сохранить результат? – codepk

0

Образец функции Bash defination и вызова с несколькими параметрами и возвращаемыми значениями. Может оказаться полезным, и он работает.

#!/bin/sh 

##Define fiunction 
function sum() 
{ 

val1=$1 

val2=$2 

val3=`expr $val1 + $val2` 

echo $val3 

} 

#Call function with 2 parameters and it return 1 parameter. 
ret_val=$(sum 10 20) 
echo $ret_val 
+0

'expr' больше не требуется для арифметики; вместо этого используйте 'val3 = $ ((val1 + val2))'. – chepner

+0

Да, это правда :) –

Смежные вопросы