ksh 脚本中的语法错误:不需要“2”

ksh 脚本中的语法错误:不需要“2”

我试图使用该fanout命令获取 Unix 机器中某些耳朵的 MD5,但出现一些错误。

我的代码是:

ears=ear1-ear2
cluster=abc
dmgr=server1
k=$(expr `echo $ears | grep -o "-" | wc -l` + 1)

fanout "$dmgr" " umask 022 ; for k in $(seq 1 $k) ; do for i in $(echo $ears | cut -d'-' -f$k) ; do echo /appl/as/bin/md5 /appl/as/var/spool/ears/${cluster}/$i ; done ; done

我收到的错误如下:

ksh: 0403-057 Syntax error at line 2 : `2' is not expected.

并且无法参考$i

答案1

出现此错误的原因是命令$(seq 1 $k)内部的插值fanout

让我解释...

运行seq 1 2返回:

1
2

您将其放在双引号内,因此换行符将保留为重要文本。因此,扇出命令的计算结果如下:

fanout server1  'umask 022 ; for k in 1
2 ; do for i in ear2 ; do echo /appl/as/bin/md5 /appl/as/var/spool/ears/abc/ ; done ; done'

ksh不明白2第二行的内容,所以它失败了。

您可以通过包含 来修复此问题xargs,但随后您会遇到第二个潜在问题,即您将其用作k循环计数器,但$k在循环运行之前对 进行评估。此外,您还有一个子 shell,$ears需要在脚本运行之前对其进行评估,但它在运行时更改的循环中使用。

我找到了一个手册页forfanout但我不明白为什么当存在针对多个系统运行命令时,您要针对单个系统( server1)运行循环。fanout如果你能解释一下 a 之间的区别服务器耳朵我也许可以建议一段更清晰的代码。不过,我的第一个建议可能是这样的:

ears='ear1,ear2'
cluster=abc
dmgr=server1

fanout "$dmgr" "/appl/as/bin/md5 /appl/as/var/spool/ears/${cluster}/{$ears}"

相关内容