我想了解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
答案 0 :(得分:14)
你正在遇到sh
扩展参数的方式的愚蠢限制。您的脚本的第3行正在扩展为:
if [ != ]
哪个sh
无法弄清楚该怎么做。尝试这个令人讨厌的黑客大小:
if [ x$JAVA_HOME != x ]
两个参数都必须是非空的,所以我们只需将x
放入其中,看看会发生什么。
或者,如果字符串非空,则有一个单独的运算符用于测试:
if [ !-z $JAVA_HOME ]
(-z
测试以下字符串是否为空。)
答案 1 :(得分:1)
if [ -z $JAVA_HOME ]
then
echo $JAVA_HOME
else
echo "NO JAVA HOME SET"
fi
答案 2 :(得分:1)
此处应使用-n
和-z
测试:
if [ -n "$JAVAHOME" ]; then
echo "$JAVAHOME";
else
echo "\$JAVAHOME not set";
fi
答案 3 :(得分:1)
请注意,如果要确定是否设置了变量,则可能不希望使用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}