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。