【问题标题】:If "NULL" then use 0 in shell scripting如果为“NULL”,则在 shell 脚本中使用 0
【发布时间】:2017-03-29 18:40:50
【问题描述】:

我正在使用一个 shell 脚本来查询一个配置单元表

last_val="`hive -e "select max(id) from ${hivedatabase}.${table}"`"

echo var1="$last_val"

When the last_val = "NULL" then I want the last_val to be zero

我已经尝试如下,但我仍然得到 Null

function value
{
   if [ "$last_val" = "NULL" ];then
        echo "0"
   elif [ "$last_val" != "NULL" ];then
        echo "$last_val"
   fi
}


echo var2="$(value)"

我想将此值用于使用 sqoop 之类的增量导入

select * from testing.1234abc check column id > value

如何在 shell 脚本中实现这一点

【问题讨论】:

  • 你真的从你的数据库中得到了NULL这个词吗?如果有,是Null 还是NULL
  • @JNevill 我得到 NULL
  • 使用bash -x yourscript 调用——从而记录每个命令及其参数,包括用于运行测试的[ 命令——可能会提供信息。如果有一个隐藏的角色在测试中失败,那会显示出来。
  • @JNevill 我相信 NULL 是一个字符串
  • @CharlesDuffy 我相信 NULL 是一个字符串

标签: linux shell scripting hive sqoop


【解决方案1】:

我正在使用这种方法,试试吧:

#!/bin/bash

hivedatabase=mydb
table=mytable
default_value="ZERO"

last_val=$(hive -e "set hive.cli.print.header=false; select max(id) from ${hivedatabase}.${table};")

if [[ "$last_val" == "NULL" ]] ; then 
  last_val="$default_value"
fi

echo "$last_val"

【讨论】:

  • echo "$last_val"echo $last_val 更真实地表示变量的内容——参见BashPitfalls #14
  • @leftjoin 我查询的表是一个空表。所以当我查询它给我NULL,所以我想要做的是如果它是NULL然后将last val作为零,否则返回lastval
  • @leftjoin 我相信NULL是一个字符串
  • @Charles Duffy 谢谢,你说得对,我已经修好了。
  • @Active_user 请查看我的更新答案。只需将变量 default_value 替换为您的值即可。我检查了它是否有效,echo 命令打印为零
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-08-31
  • 1970-01-01
  • 2016-07-21
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多