尝试 bash shell 脚本并遇到小问题:
# hostname --short
7phdsn01
# virsh --readonly list --state-running --name
Nagios
# set $(hostname --short)=$(virsh --readonly list --state-running --name)
# echo $?
0
# echo $7phdsn01
phdsn01
#
请指教。
# unset $7phdsn01
# set $(hostname --short)=$(virsh --readonly list --state-running --name)
# echo $7phdsn01
phdsn01
#
答案1
该set
命令不会像bash
.您可能想尝试declare
一下。
看起来您想使用以主机名命名的变量。不幸的是,主机名以数字开头,因此它不能用作变量的名称。
该命令echo $7phdsn01
输出phdsn01
因为$7
(第 7 个位置参数)未设置并扩展为空,后跟字符串的其余部分。
我可能会用
declare -A state
state["$(hostname --short)"]=$(virsh --readonly list --state-running --name)
这将创建一个名为 的关联数组state
。下一行将命令给出的键的值设置hostname --state
为命令的输出virsh
。
数组的值和键state
可以如下所示:
for host in "${!state[@]}"; do
printf 'Host %s is in state %s\n' "$host" "${state[$host]}"
done
如果您是为单个主机执行此操作,那么显然没有必要那么花哨。相反,只需使用两个变量:
host=$(hostname --short)
state=$(virsh --readonly list --state-running --name)
printf 'Host %s is in state %s\n' "$host" "$state"