В чем ошибка в этом сценарии оболочки - PullRequest
0 голосов
/ 12 марта 2012

Я написал следующий код ..

installFunction(){

    perl Makefile.PL
    flag1 = $?

    make    
    flag2 = $?

    make install
    flag3 = $?

    make test
    flag4 = $?

    cd ..


    return $flag1 || $flag2 || $flag3 || $flag4
}
if(installFunction != 0)
    then
        echo "installation failure"
        exit
fi  

Но когда я запускаю код, я получаю следующую ошибку

. / Установить: 53: флаг1: не найден

. / Установить: 53: flag2: не найдено

. / Установить: 53: flag3: не найдено

. / Установить: 53: flag4: не найдено

Кто-нибудь может сказать, в чем проблема?

Заранее спасибо !!

Ответы [ 3 ]

6 голосов
/ 12 марта 2012

try

flag1=$?

обратите внимание на отсутствие пробелов.

http://tldp.org/LDP/abs/html/varassignment.html


И, как уже упоминалось, ваш оператор if недействителен.
installFunction
if [ $? -ne 0 ]
then
        echo "installation failure"
        exit
fi

должно работать.обязательная ссылка: http://tldp.org/LDP/Bash-Beginners-Guide/html/sect_07_01.html

2 голосов
/ 12 марта 2012

Инструкция возврата также неверна: return $((flag1 | flag2 | flag3 | flag4))

1 голос
/ 12 марта 2012

Неправильное присвоение переменной, man bash и чтение на ПАРАМЕТРЫ . Этот раздел должен объяснить в деталях.

Ваш синтаксис оператора if неверен, в руководстве по bash читайте Составные команды

Если я понимаю вашу семантическую инструкцию if, вы хотите проверить код возврата из вашего вызова функции и убедиться, что он не равен нулю? Вы должны вызвать свою функцию и затем получить код возврата, используя $?. Следовательно, вам нужно сделать небольшую модификацию там.

И последнее, но не менее важное: вы можете проверить скрипт на наличие синтаксических ошибок, выполнив команду sh -n script.sh

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...