不多说先上代码
while read line
do
hive -e "use zy_tes; desc ${line};" 2>&1 | grep 'Table not found'
rtstatus=$?
if [[ $rtstatus -ne 0 ]]; then
echo "${line}表已存在!"
(( tab_num+=1 ))
else
echo "${line}表不存在!"
#表创建不完整退出整个程序
exit
fi
done < /ZY/table.conf
tab_list_cnt=`awk 'END{print NR}' /ZY/table.conf`
echo ${tab_list_cnt}
echo ${tab_num}
if [[ ${tab_list_cnt} -eq ${tab_num} ]];then
echo "初始化建表${tab_list_cnt}张,成功创建${tab_num}张!"
else
echo "建表数量不一致,请检查!"
exit
fi
难点在于理解2>&1
建议大家先去看看这篇文章
大佬的解释
2>&1实际是将程序运行时的错误日志给重新定向,我理解为,你在运行程序后面加入这个可以帮你把错误日志拿到当前的脚本中进行判断,例如下面的例子
#!/bin/bash
hive -e "use zy_tes; desc table_name;" 2>&1 | grep 'Table not found'
如果不加2>&1,你是无法在这个shell脚本中读取到hive -e 查找不到表时的错误日志的,加上这个你就可以,定义一个参数保存上一条命令的状态了。