Shell ZSH仅在数组的第一项上循环
当我执行时,我不会得到循环超过第二个值10.138.0.91,如下所示Shell ZSH仅在数组的第一项上循环,shell,unix,scripting,zsh,shebang,Shell,Unix,Scripting,Zsh,Shebang,当我执行时,我不会得到循环超过第二个值10.138.0.91,如下所示 #/bin/zsh servers=('10.138.0.8' '10.138.0.91') for srv in $servers; do echo "Checking health for " $srv echo "==========================================" echo mntr | nc $srv 2181 done 为什么?因为您的脚本没有被zsh执行
#/bin/zsh
servers=('10.138.0.8' '10.138.0.91')
for srv in $servers; do
echo "Checking health for " $srv
echo "=========================================="
echo mntr | nc $srv 2181
done
为什么?因为您的脚本没有被zsh执行。修复:
#/bin/zsh
为什么你的脚本会被执行,即使没有shebang行?因为:
ENOEXEC
)/healthcheck/zookeeper.sh
的shell打开文件并注意到它看起来像是一个脚本文本,从而做出响应。传统上,它调用/bin/sh
来执行脚本。对于/bin/sh
,第一行只是一条普通的注释显然,
/bin/sh
在您的机器上是bash或ksh。数组分配使用与zsh相同的语法工作,但对数组的引用没有-在ksh/bash语法中,您必须编写“${servers[@]}”
(以“$@”
为模型)来枚举数组的元素。,因为您的脚本不是由zsh执行的。修复:#/bin/zsh
为什么你的脚本会被执行,即使没有shebang行?因为:
ENOEXEC
)/healthcheck/zookeeper.sh
的shell打开文件并注意到它看起来像是一个脚本文本,从而做出响应。传统上,它调用/bin/sh
来执行脚本。对于/bin/sh
,第一行只是一条普通的注释/bin/sh
在您的机器上是bash或ksh。数组分配使用与zsh相同的语法工作,但对数组的引用没有使用-在ksh/bash语法中,您必须编写“${servers[@]}”
(以“$@”
为模型)来枚举数组的元素。:)这一行在我的shell中变灰,因此我错过了它。最严重的错误是最明显的!谢谢Gilles!:)这条线在我的壳里变灰了,所以我错过了。最严重的错误是最明显的!谢谢Gilles!
[devops@devops]~% ./healthcheck/zookeeper.sh
Checking health for 10.138.0.8
==========================================
zk_version 3.4.10-39d3a4f269333c922ed3db283be479f9deacaa0f, built on 03/23/2017 10:13 GMT
zk_avg_latency 0
zk_max_latency 0
zk_min_latency 0
zk_packets_received 9
zk_packets_sent 8
zk_num_alive_connections 1
zk_outstanding_requests 0
zk_server_state follower
zk_znode_count 4
zk_watch_count 0
zk_ephemerals_count 0
zk_approximate_data_size 27
zk_open_file_descriptor_count 28
zk_max_file_descriptor_count 4096