我有代码,其中awk被传送到clearcase命令,其中If else循环不起作用。
代码如下:
#!/bin/ksh
export dst_region=$1
cleartool lsview -l | gawk -F":" \ '{ if ($0 ~ /Global path:/) { if($dst_region == "ABC" || $dst_region -eq "ABC") { system("echo dest_region is ABC");}
else { system("echo dest_region is not ABC"); } }; }'
但是当我执行上面的脚本时,输出错误,
*$ ksh script.sh ABCD
dest_region is ABC
$ ksh script.sh ABC
dest_region is ABC*
有人可以帮忙解决这个问题吗?
答案 0 :(得分:1)
如果你准确地解释了你想要做什么,但你的awk脚本可以被清理很多,那将是有用的:
gawk -F":" -vdst_region="$1" '/Global path:/ { if (dst_region == "ABC") print "dest_region is ABC"; else print "dest_region is not ABC" }'
一般要点:
-v
从$1
的值创建一个awk变量,这是脚本的第一个参数。这意味着您可以在脚本中更轻松地使用它。condition { action }
,所以你不必要地在整个单行间使用if
$0 ~ /Global path:/
可以更改为/Global path:/
||
的两边看起来他们都试图做同样的事情,所以我摆脱了那个在awk中不起作用的那个。使用==
比较字符串。system("echo ...")
完全没必要。使用awk内置的print
您可以更进一步,完全删除if-else
:
gawk -F":" -vdst_region="$1" '/Global path:/ { printf "dest region is%s ABC", (dst_region=="ABC"?"":" not") }'