2015-01-09 78 views
0
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'語句打印找到的文件。 但是,如果找不到文件,則無法打印。我嘗試了所有的空字符串測試,並取消設置變量,沒有任何工作。 另外,如果我嘗試:在cygwin bash腳本中查找語句

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循環來測試多個文件。

+0

不是我會這樣做的方式,而是要對您的直接問題發表評論,而不是使用'-n「$ {i}」',嘗試使用'-f $ {i}「'祝好運。 – shellter 2015-01-10 04:20:00

回答

2

它不工作的原因是由於這樣的事實,「對於」不走空值作爲輸入的變量「i」

對於前:

因爲我在echo > /dev/null;做回聲嗨;完成

上面的命令不會給出任何結果,因爲沒有值被賦值給$ i來運行循環。

在這裏提到的情況下,如果我們在調試模式下檢查腳本,我們可以看到腳本在初始變量賦值時死亡。

#sh -x script.sh + find。 -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來檢查文件是否存在。

希望這會有所幫助!