gpt4 book ai didi

bash - 使用 shell 条件检查目录是否存在于 hdfs 中

转载 作者:可可西里 更新时间:2023-11-01 15:26:12 25 4
gpt4 key购买 nike

我正在创建一个提示脚本,用于验证输出目录是否存在于 hdfs 目录中。这是我想出来的

while true; do
read -p "What is the table name ?" table_name
case "$table_name" in
* ) if (( $(hdfs dfs -test -d /user/hive/bar/foo/$test_table) )) ;
then echo "ok"; else echo "not ok"; fi ;;
esac
done

这是行不通的。我没有收到任何错误,但如果条件为真,输出总是“不正常”。

最佳答案

您的初始编辑存在一些违规行为(句法/语义)。

  1. case 子句中的字符串 case '$table_name' in 将永远不会扩展,因为出现在单引号下。它不会抛出错误,因为您试图在不进行任何扩展的情况下匹配文字字符串。您需要将其双引号为 case "$table_name"
  2. Multiple *) 永远不会起作用,第 2 个 nd 永远不会匹配,因为第一个表达式总是匹配。将其替换为实际表达式

使用您的更新脚本,问题是检查 (( 运算符中 a 命令的成功返回码,该运算符用于算术评估。您只需要使用

if hdfs dfs -test -d /user/hive/bar/foo/$test_table; then
printf 'table exists\n'
fi

基本原理是命令只有一种方式 (0) 成功,但有多种方式(任何非零整数)失败。不要将 bash 对退出状态的使用与 0 为 false 和非零为 true 的标准 bool 解释相混淆。 shell if 语句检查其命令是否成功。

关于bash - 使用 shell 条件检查目录是否存在于 hdfs 中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46835872/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com