if语句在shell脚本中检查$ HOSTNAME

Nic*_*ole 27 unix testing shell

所以我想根据主机设置不同的路径,但遗憾的是它不起作用.这是我的脚本:

if [$HOSTNAME == "foo"]; then
    echo "success"
else
    echo "failure"
fi
Run Code Online (Sandbox Code Playgroud)

这是发生的事情:

-bash: [foo: command not found
failure
Run Code Online (Sandbox Code Playgroud)

我肯定知道$ HOSTNAME是foo,所以我不确定问题是什么.虽然我很吵.任何帮助,将不胜感激!谢谢!

Jen*_*ens 50

用于比较shell中的字符串的POSIX和可移植方式是

if [ "$HOSTNAME" = foo ]; then
    printf '%s\n' "on the right host"
else
    printf '%s\n' "uh-oh, not on foo"
fi
Run Code Online (Sandbox Code Playgroud)

但是,案例陈述可能更灵活:

case $HOSTNAME in
  (foo) echo "Woohoo, we're on foo!";;
  (bar) echo "Oops, bar? Are you kidding?";;
  (*)   echo "How did I get in the middle of nowhere?";;
esac
Run Code Online (Sandbox Code Playgroud)

  • 一个,也只有一个.这是POSIX.任何其他东西都是伪造的外壳,接受的不仅仅是它应该,促进`==`不合规的脚本疾病. (2认同)