1. 程式人生 > >判斷檔案是否存在,萬用字元檔案匹配發生錯誤 binary operator expected

判斷檔案是否存在,萬用字元檔案匹配發生錯誤 binary operator expected

time1=$(date -d "$currentTime" +%s)
time2=$(($time1-24*3600))
filepath=/root/g01/g_01_api_*_$time2.txt
if [ -f $filepath ];
then
echo '找到匹配的檔案'
for i in $filepath
do
   echo $i
done
echo "執行hive load語句"
hive -e 'load data local inpath "$filepath" into table notify_portal.t_g01 PARTITION(pt="INIT");'
else
echo
"檔案不存在或者您輸入的路徑有誤$filepath" fi

if [ -f $filepath ];這句報錯-bash: [: /root/g01/g_01_api_shenzhen_1478966400.txt: binary operator expected
找了半天錯誤,最後發現,-f後面根本是不能跟萬用字元,或者說可以跟萬用字元,但是除非只有一個檔案被匹配上。
遂使用if [ -n "ls $filepath" ];來判斷,意思是ls命令列出萬用字元匹配的檔案,存在返回true,這個在檔案存在的時候是沒問題,但是如果不存在,就會報錯而不是返回false:No such file or directory


然後去查,發現有人遇到過一個一樣的問題, 解決辦法是把標準錯誤重定向到正確輸出,使用
if [ -n "ls $filepath >/dev/null 2>&1" ];解決。

linux啟動後,會預設開啟3個檔案描述符,分別是:
標準輸入standard input 0,
正確輸出standard output 1,
錯誤輸出error output 2。