2015-10-05 4 views
0

Хорошо, так что это назначение, поэтому я не буду вставлять здесь точный скрипт, но я действительно отчаянный в этот момент, потому что я не могу понять что-то как основное, как если бы оно было. Поэтому я в основном проверяю, подходят ли два аргумента, которые написаны в командной строке (пользователь должен правильно ввести его), или он будет эхо-сообщение об ошибке. Однако, когда я добавляю команду с 100% правильными аргументами, я получаю сообщение эхо-сообщения об ошибке из первого условного ALWAYS (даже если я переключаю условные операторы). Кажется, что сценарий просто запускает первое эхо и останавливается, несмотря ни на что. Пожалуйста, помогите, и я понимаю, что это может быть сложно, так как мой код больше скелет.Bash Script с if, elif, else

if [ ... ]; then 
echo "blah" 

elif [ ... ]; then 
echo "blah2" 

else for file; do 
#change file to the 1st argument 

done 
fi 

Я, очевидно, нуждаюсь в последнем, чтобы случился, чтобы мой сценарий действительно выполнял намеченную цель. Однако моя проблема if-fy мешает. If и elif должны возвращать false, чтобы скрипт выполнялся для соответствующих аргументов. Проверка if и elif, чтобы проверить, правильно ли введен персонаж в командной строке.

+3

Возможно, вам необходимо показать тесты, 'else', это, вероятно, означает, что вы перевернули свои тесты (вам нужно проверить', если arg1 недействителен, тогда echo blah blah 1 elif arg2 недействителен, тогда echo blah bletch 2 else ... fi'. –

+0

Каков фактический код вы запускаете там, где вы показываете '...'? Это действительно самая важная деталь здесь. – chepner

ответ

2

elif средний прочее-если. Поэтому он будет проверяться только в том случае, если первый оператор возвращает false. Поэтому, если вы хотите проверить, правильны ли они оба.

if [ ... ] then 
... 
fi 

if [ ... ] then 
... 
fi 
+0

Что вы делаете в '...' в теле этих операторов? 'if' ...' elif' ... 'else' имеет некоторые более хорошие свойства, чем это, если вы не выйдете из сценария в своих инструкциях body ... ... И было бы предпочтительнее оставить пробелы вокруг '' '' '' '' '' '', поскольку они являются _crucial_ в shell pr ogramming. –

+0

@ jonathan Я согласен с тем, что для его целей вы предложили лучшую структуру, но вы не сможете повторить, что оба аргумента неверны, делая это именно так. – geokavel

0

Когда вы заботитесь о проверке как вторых аргументов командной строки первого и для одного условия (т.е. они оба должны соответствовать ряду критериев для условия, чтобы быть правдой), то вам потребуется соединение тест конструкцию, как:

if [ "$1" = somestring -a "$2" = somethingelse ]; then 
    do whatever 
fi 

, которые также могут быть записаны

if [ "$1" = somestring ] && [ "$2" = somethingelse ]; then 
... 

Примечание: синтаксис [ .... -a .... ] все еще поддерживается, но рекомендуется использовать [ .... ] && [ .... ] синтаксис для нового развития.

Кроме того, можно варьировать так, как они испытаны (либо истина/ложь) с помощью -o для ИЛИ состоянии или || во второй форме. Вы можете дополнительно изменить свой тест, используя различные тестовые выражения (например, =, !=, -gt и т. Д.)

+1

* Должно быть написано '[...] && [...]'. '-a' поддерживается по историческим причинам, но не рекомендуется для нового кода. – chepner

+0

Согласовано, поэтому обе версии были даны. Думаю, акцент должен быть более ясным. –

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