【问题标题】:Need help in for loop in kshell scripting for linux在 Linux 的 kshell 脚本中的 for 循环中需要帮助
【发布时间】:2017-12-05 08:20:41
【问题描述】:

有人能说说下面的工作原理吗?

server.ksh file contains the below.
n=$1   ### what does this do ? 
ssh $n date;

test 是一个包含 50 个服务器列表的文件。 现在我运行以下内容。

for a in `cat test`; do ksh server.ksh $a >> date$a & done

随便看看上面你可以说它只是打印所有服务器的日期并保存 o/p。但问题是它同时命中所有服务器!!(即不像传统的for循环一个接一个)。有人可以分解并解释一下吗?

【问题讨论】:

  • 这些都不是ksh特有的,您应该通过省略ksh标签并从标题中删除kshell来扩大问题的范围。

标签: linux shell scripting ksh


【解决方案1】:
# assign variable 'n' the value of the first input parameter to
# the server.ksh invocation; a server name in this case
n=$1

# make a ssh call to the server whose name is stored in
# variable 'n', on the remote host run the 'date' command
ssh $n date;

您的 while 循环正在后台启动 server.ksh 调用 (&);这允许循环继续进行下一次迭代,同时仍在处理 server.ksh 调用;最终结果是您最终会同时收到多个 ssh 呼叫。

看起来一切都是在同一时间完成的,因为date 命令的默认输出仅精确到最接近的秒数。如果您提高date 输出的精度,您可能会看到ssh 调用并非“完全”同时完成,例如:

# output format: HH:MM:SS.nnnnnnnnn (nano-seconds)
ssh $n "date +'%H:%M:%S.%N'";

显然 (?) 如果各种服务器的系统时钟关闭了几分之一秒,date 输出也可能存在差异。

【讨论】:

  • 你能告诉我是什么原因导致它进入 bg 吗?
  • 与号字符 - & - 表示在后台运行 server.ksh 调用
  • 我不确定.. 这不是一个合乎逻辑的 & 在这种情况下打印并在完成后退出吗?
  • 我确定 ... logical AND 是双 & 符号 - &&;此外,如果您将 while 循环重写为多行结构,您会发现 server.ksh 调用是循环中的最后一个命令(即,logically AND 没有任何内容)
  • 谢谢伙伴.. 脚本的新手.. 在这种情况下 n=$1 是?
猜你喜欢
  • 1970-01-01
  • 2018-05-16
  • 2016-11-30
  • 2022-10-25
  • 2021-05-14
  • 1970-01-01
  • 2012-06-10
  • 1970-01-01
  • 2021-08-25
相关资源
最近更新 更多