Sh / Bash если еще заявление - PullRequest
       5

Sh / Bash если еще заявление

8 голосов
/ 11 августа 2011

Я хочу понять if else утверждение в sh сценарии

Итак, я написал ниже, чтобы узнать , установлен ли JAVA_HOME в среде или нет , я написал следующий скрипт

#!/bin/sh
if [ $JAVA_HOME != "" ]
then
    echo $JAVA_HOME
else
    echo "NO JAVA HOME SET"
fi

Это мой вывод env

sh-3.2$ env

SHELL=/bin/csh
TERM=xterm
HOST=estilor
SSH_CLIENT=10.15.16.28 4348 22
SSH_TTY=/dev/pts/18
USER=asimonraj
GROUP=ccusers
HOSTTYPE=x86_64-linux
PATH=/usr/local/bin:/bin:/home/asimonraj/java/LINUXJAVA/java/bin:/usr/bin
MAIL=/var/mail/asimonraj
PWD=/home/asimonraj/nix
HOME=/home/asimonraj
SHLVL=10
OSTYPE=linux
VENDOR=unknown
LOGNAME=asimonraj
MACHTYPE=x86_64
SSH_CONNECTION=100.65.116.248 4348 100.65.116.127 22
_=/bin/env

но я получаю ниже вывод

sh-3.2$ ./test.sh
./test.sh: line 3: [: !=: unary operator expected
NO JAVA HOME SET

Ответы [ 4 ]

14 голосов
/ 11 августа 2011

Вы сталкиваетесь с глупым ограничением способа, которым sh расширяет аргументы.Строка 3 вашего сценария расширяется до:

if [ != ]

С которой sh не может понять, что делать.Попробуйте этот мерзкий взлом для размера:

if [ x$JAVA_HOME != x ]

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

if [ !-z $JAVA_HOME ]

(-z проверяет, является ли следующая строка пустой.)

1 голос
/ 12 августа 2011

Обратите внимание, что если вы хотите определить, установлена ​​ли переменная, вы, вероятно, не захотите использовать if / else или test ([).Более типично делать такие вещи, как:

# Abort if JAVA_HOME is not set (or empty)
: ${JAVA_HOME:?JAVA_HOME is unset}

или

# report the value of JAVA_HOME, or a default value
echo ${JAVA_HOME:-default value}

или

# Assign JAVA_HOME if it is unset (or empty)
: ${JAVAHOME:=default value}
1 голос
/ 11 августа 2011

-n и -z - это тесты, которые следует использовать здесь:

if [ -n "$JAVAHOME" ]; then
    echo "$JAVAHOME";
else
    echo "\$JAVAHOME not set";
fi
1 голос
/ 11 августа 2011
if [ -z $JAVA_HOME  ]  
then  
    echo $JAVA_HOME  
else  
    echo "NO JAVA HOME SET"  
fi
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...