2014-10-30 2 views
0

Новобранец здесь! Это очень просто. Я пытаюсь написать сценарий, который запрашивает пользовательские входы. Затем введите входы и сделайте некоторые вещи с ним. Но я сначала хочу убедиться, что входы предоставлены.Дайте ошибку и выйдите, если нет ввода клавиатуры.

Пример:

echo "Please provide input1:" 
read Input1 
echo "Please provide input2:" 
read Input2 

if [ -z "$Input1" ] 
echo "You did not provide input1" 
exit 
else if [ -z "$Input2" ] 
echo "You did not provide input2" 
exit 
fi 

Однако вышеупомянутое не работает. Есть ли способ заставить его работать, делая его более читаемым? Есть ли более простой способ?

+0

'Input1' - это буквальная строка, вы хотите ссылаться на переменную. Используйте '' $ Input1 "'. –

+0

Так что, «не работает», вы имеете в виду, что получаете синтаксическую ошибку? Вы должны были сказать это и включить синтаксическую ошибку в свой пост. –

+0

Да, @glennjackman elif - это то, что мне нужно. Но есть ли лучший способ? Мне не нравится иметь этот кусок кода в середине скрипта. Есть ли лучший способ сделать это? – SSF

ответ

1

Вы хотите elif не else if, и вам не хватает обязательных then ключевые слова: https://www.gnu.org/software/bash/manual/bashref.html#Conditional-Constructs

read -p "Please provide input1: " Input1 
read -p "Please provide input2: " Input2 

if [ -z "$Input1" ]; then 
    echo "You did not provide input1" 
    exit 
elif [ -z "$Input2" ]; then 
    echo "You did not provide input2" 
    exit 
fi 

Если, вместо того, чтобы выходить, вы хотите, чтобы обеспечить значение по умолчанию, вы можете сделать:

read -p "Please provide input1: " Input1 
read -p "Please provide input2: " Input2 
: ${Input1:=first default value} 
: ${Input2:=second default value} 
echo "Input1: $Input1" 
echo "Input2: $Input2" 
+0

Спасибо. Это решило проблему. Ссылка очень полезна. – SSF

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