您的位置:首页 > 运维架构 > Shell

shell切换用户EOF下变量的使用[: ==: unary operator expected

2017-05-24 18:30 423 查看

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


内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: