是否仅在$HOSTNAME为空时运行Shell脚本?
我试图编写一个shell脚本,该脚本仅在$HOSTNAME为空时运行(例如,在已归零的节点上)。但是,即使已经设置了主机名,代码的if条件也会继续运行。我错过什么了吗是否仅在$HOSTNAME为空时运行Shell脚本?,shell,sh,Shell,Sh,我试图编写一个shell脚本,该脚本仅在$HOSTNAME为空时运行(例如,在已归零的节点上)。但是,即使已经设置了主机名,代码的if条件也会继续运行。我错过什么了吗 $HOSTNAME=$(hostname) if [ "$HOSTNAME" = "" ]; then logger "STARTING sleep 120s to complete boot process" sleep 120 logger "AFTER 120s" logger "STARTI
$HOSTNAME=$(hostname)
if [ "$HOSTNAME" = "" ]; then
logger "STARTING sleep 120s to complete boot process"
sleep 120
logger "AFTER 120s"
logger "STARTING configuration using script"
/usr/sbin/cli -c '
configure;
#Configuration changes happen here
commit'
else
echo "No changes were made"
fi
首先,要在bash中分配变量,不需要使用美元
$
其次,要检查if语句中的条件,必须使用
=
而不是=
最后,最好检查字符串的长度,而不是与
“
进行比较。您可以使用-z
选项执行此操作。下面是固定代码:
#!/bin/bash
HOSTNAME=$(hostname)
if [ -z "$HOSTNAME" ]; then
logger "STARTING sleep 120s to complete boot process"
sleep 120
logger "AFTER 120s"
logger "STARTING configuration using script"
/usr/sbin/cli -c '
configure;
#Configuration changes happen here
commit'
else
echo "No changes were made"
fi
如何设置主机名?(或者更相关地说,如何防止设置
HOSTNAME
,这取决于您使用的shell?@chepner我已经尝试使用$HOSTNAME=$(HOSTNAME)。希望是如果它是空的,那么“if”语句将运行并在节点上进行配置更改。否则什么也不会发生。它应该是HOSTNAME=$(HOSTNAME)
(在HOSTNAME
之前没有$
,在=
周围没有空格)。如果您使用的是bash
,HOSTNAME
已经设置好了。非常感谢!我认为变量总是必须有$。而不是在shell中(与Perl和PHP不同);参数名称前面的$
表示参数扩展。