2017-02-06 6 views
-2
FROM_PROJECT=false 
if [[ -z $INV_NAME ]]; then 
    if [[ -z $PRO_NAME ]]; then 
      echo "error: variable not set" >&2 
      exit 1 
    elif [[ -z $INV_FILE ]]; then 
      echo "error: variable INV not set" >&2 
      exit 1 
    fi 
    FROM_PRO=true 
elif [[ -n $PRO_NAME ]] || [[ -n $INV_FILE ]]; then 
    echo "error: variable INV_NAME is not compatible with PRO_NAME and    INVENTORY_FILE" >&2 
    exit 1 

Я не уверен, что эти «-z» и «-n» здесь делают?Что делает этот сценарий оболочки?

+0

http://explainshell.com/ предоставит вам объяснение любой отдельной строки оболочки; '[[-z $ INV_NAME]]' или '[[-n $ PRO_NAME]]' можно использовать там. –

+0

BTW, используя строки 'true' и' false' как условные обозначения - очень плохая практика. Код, который делает это обычно, также делает что-то вроде 'if $ FROM_PROJECT; затем ... "и, тем самым, выполняет выполнение полу-произвольного кода (если содержимому ваших переменных можно присвоить произвольные значения, добавив что-то, что необходимо проверить для проверки безопасности). Вместо этого используйте пустое/не пустое состояние, чтобы выполнить логическое определение. –

+0

(Можно также использовать '0' и' 1' как булевы достаточно легко: 'if ((some_value))' будет правдивым, если 'some_value' содержит положительное целочисленное значение или имя переменной, которая сама содержит положительную целочисленное значение). –

ответ

2

-z используется для проверки того, является ли строка пустой.

-n - обратное.

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