Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/shell/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
是否仅在$HOSTNAME为空时运行Shell脚本?_Shell_Sh - Fatal编程技术网

是否仅在$HOSTNAME为空时运行Shell脚本?

是否仅在$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

我试图编写一个shell脚本,该脚本仅在$HOSTNAME为空时运行(例如,在已归零的节点上)。但是,即使已经设置了主机名,代码的if条件也会继续运行。我错过什么了吗

$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不同);参数名称前面的
$
表示参数扩展。