shell脚本开头加上set -e命令后,在运行过程中如果出现返回值为非零,整个脚本就可以立刻退出。
假如脚本中有if判断, 很可能if条件的返回值是不为0的。一开始我是把hadoop fs -test -d $hdfs_folder单独写一行的,由于folder不存在,所以脚本直接退出。所以遇到这种情况,需要把有可能是结果返回非0的命令,作为if的条件语句来判断,从而避免和set -e冲突的情况发生。
#!/bin/bash filename=file.txt set -e while read table_row do if (hadoop fs -test -d $hdfs_folder) then echo "folder $hdfs_folder to be deleted." hadoop fs -rm -r -skipTrash $hdfs_folder if [ $? -ne 0 ] then echo "$path unable to be deleted." exit 1 fi else echo "folder $hdfs_folder not exist." fi done < $filename