простой bash-скрипт с оператором if else плюс проблема отладки - PullRequest
0 голосов
/ 30 октября 2011

Я работаю над простым сценарием bash, и независимо от того, что пользователь вводит как choice, результат первого условия всегда печатается.Может кто-нибудь объяснить, что здесь происходит?Кстати, как вы отлаживаете скрипт bash, как этот?Когда я пытаюсь отладить в ecplise с помощью плагина сценария оболочки, единственным вариантом является «сборка муравья», которая, когда я пытаюсь это сделать, ничего не делает!

Ответы [ 3 ]

2 голосов
/ 30 октября 2011

[ $choice="Y" ] Заменяет $choice, затем проверяет, является ли замена с добавленной к нему '= "Y" непустой строкой.Вы имели в виду [ "$choice" = Y ].

0 голосов
/ 30 октября 2011

Для отслеживания исполнения вашего скрипта используйте

set -x

Это заставит оболочку выводить значения так, как их видит интерпретатор, строка за строкой ... однако, в этом случае, это не говорит вам слишком много:

$ cat /tmp/test.sh 
set -x
if [ -f $1 ]
then
    echo "Are you sure you want to delete $1? Y for yes, N for no"
    read choice
    if [ $choice="Y" ]
    then
        echo "okay"
    else
        echo "file was not deleted"
    fi 
fi



$ bash /tmp/test.sh 
+ '[' -f ']'
+ echo 'Are you sure you want to delete ? Y for yes, N for no'
Are you sure you want to delete ? Y for yes, N for no
+ read choice
N
+ '[' N=Y ']'
+ echo okay
okay

Ну ... на самом деле, это буквально говорит вам, что '[$ choice = "Y"] "неверно, но не говорит вам, почему это неправильно или как это исправить.

0 голосов
/ 30 октября 2011

Если вы думаете, что запускаете свой скрипт без каких-либо аргументов.В этом случае $ 1 ничего не значит, а [ -f $1 ] всегда верно.Попробуйте запустить свой скрипт с аргументом, чтобы выяснить.

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