shell切换用户EOF下变量的使用[: ==: unary operator expected
情况背景:
在切换用户的时候,for循环获取不到值,如下:
su - hadoop <<EOF
for mm in ${ip[*]};do
if [ ${mm} == ${master} ]
then
echo "============="${mm}
ssh hadoop@${mm} "cd /opt/hadoop && ./sbin/start-all.sh"
fi
done
EOF
报错信息如下:
[: ==: unary operator expected
解决方法:
1.第一种网上搜,都说是mm的值为空导致的,所以需要加上两个[],[[${mm}]]
,还有是给变量加上双引号,["${mm}"]
。你们可以验证一下。但我觉得最终的方法是第2种
2.就是在su - hadoop切换用户的时候,<<EOF
中变量的使用方法不对,应该是下面这样${mm},多了一个反斜杠,经测试是正确的。
#/bin/bash
path=`pwd`
source /${path}/../cfg.config
echo '++++++++++++++++++'${ip[*]}
echo '++++++++++++++++++'${master}
su - hadoop <<EOF
for mm in ${ip[*]};do
if [ \${mm} == ${master} ]
then
echo "============="\${mm}
ssh hadoop@\${mm} "cd /opt/hadoop && ./sbin/start-all.sh"
fi
done
EOF