在 cygwin bash 脚本中查找语句

find statement in cygwin bash script

for i in `find . -type f -name "VF-Outlet*.edi" -exec basename \{} \;` ; do
 if [ -n "${i}" ];
 then
 echo file "VF-Outlet found";
 sed -e 's/\*UK\*00/\*UP\*/g;s/XQ.*$/XQ\*H\*20150104\*20150110/g' $i > ${i}_fix
else
 echo file "VF-Outlet" not found;
fi
done

如果找到文件,以上代码有效。 'echo' 语句打印找到的文件。 但是,如果找不到该文件,则不会打印任何内容。我尝试了所有针对空字符串和未设置变量的各种测试,但没有任何效果。 另外,如果我尝试:

i=`find . -type f -name "VF-Outlet*.edi" -exec basename \{} \;`;

然后做测试:

if [ -n "${i}" ];
 then
 echo file ${i} found;
else
 echo file "VF-Outlet" not found;
fi
done

无论是否找到文件,它都能正常工作。

需要帮助来解决这个问题。我需要 for 循环来测试多个文件。

它不起作用的原因是 "for" 没有将空值作为变量 "i"

的输入

例如:

我在echo > /dev/null;回声嗨;完成

上述命令不会给出任何结果,因为在 运行 循环中没有为值 $i 赋值。

在这里提到的情况下,如果我们在调试模式下检查脚本,我们可以看到脚本在初始变量分配时终止。

# sh -x script.sh + 寻找。 -type f -name VF-Outlet*.edi -exec basename {} ;

此处,script.sh 文件包含您提供的脚本。

如果目录中存在文件,脚本将成功执行。

# sh -x tet
+ find . -type f -name VF-Outlet*.edi -exec basename {} ;
+ [ -n VF-Outlet1.edi ]
+ echo file VF-Outlet found
file VF-Outlet found

正如@shellter 提到的,这不是我会做的。您可以使用 -f 而不是 -n 来检查文件是否存在。

希望对您有所帮助!