shell脚本错误问题

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了shell脚本错误问题相关的知识,希望对你有一定的参考价值。

yesterday()

oset=`echo $TZ|tr -d '[A-Z+]`
new_offset=`expr $oset + 24`
TZ=`echo $TZ|sed "s/[+-]\0,1\[0-9][0-9]\0,1\/$new_oset/\
`date+%m\/%d\/20%y

clear
lastday=`yesterday`
echo "\n\n\n\n\n\n\n\t\t请输入日期(缺省为昨日mm/dd/yyyy):\c"
read days
days=$days:="$lastday"
这个shell脚本为什么提示:
./yesterday: command substitution: line 1: unexpected EOF while looking for matching `''
./yesterday: command substitution: line 2: syntax error: unexpected end of file
expr: syntax error
./yesterday: command substitution: line 1: unexpected EOF while looking for matching `"'
./yesterday: command substitution: line 2: syntax error: unexpected end of file
哪里有错呢?谢谢!

错误提示中已经说了:
首先yesterday函数中 line 1 有问题

oset=`echo $TZ|tr -d '[A-Z+]`
少了一个匹配的单引号啊

这个错误同时也导致line2的错误

另外,楼上说了,脚本第五行(yesterday函数中的第三行)也缺少匹配的双引号。

建议使用 sh -n scripts.sh 来检查脚本是否有语法问题,
然后使用 sh -x scripts.sh 来显示所有语句的执行过程,
这样可以比较清楚地看出哪里出问题了。
参考技术A 首先你要理解这段脚本的作用,其次你可以将oset=`echo $TZ|tr -d `[A-Z+]`的改成oset=$(echo $TZ|tr -d "[A-Z+]")这样也可以执行并赋值,另外,第五行里都缺少结束的双引号,可以多试试!

使用 shell 脚本在 Impala 中捕获错误

【中文标题】使用 shell 脚本在 Impala 中捕获错误【英文标题】:Capturing the Error in Impala using a shell script 【发布时间】:2017-02-28 19:31:11 【问题描述】:

我正在尝试使用 shell 脚本执行一些 impala 查询。如果 impala 查询失败,我想捕获错误消息并将其写入文本文件。

有没有办法捕获错误消息?不仅仅是可以使用“$?”访问的退出状态,还有 impala 给出的实际错误消息。

任何帮助将不胜感激。谢谢。

【问题讨论】:

【参考方案1】:

演示

$ cat>myfile.sql
select 1 as col1;
select abc;
select 2 as col2;

$ impala-shell -f myfile.sql 1>myfile.txt 2>myfile.err
$ result=$?

$ echo $result 
1

$ cat myfile.txt
+------+
| col1 |
+------+
| 1    |
+------+

$ cat myfile.err
Starting Impala Shell without Kerberos authentication
Connected to quickstart.cloudera:21000
Server version: impalad version 2.5.0-cdh5.7.0 RELEASE (build ad3f5adabedf56fe6bd9eea39147c067cc552703)
Query: select 1 as col1
Fetched 1 row(s) in 0.05s
Query: select abc
ERROR: AnalysisException: Could not resolve column/field reference: 'abc'

Could not execute command: select abc

【讨论】:

感谢您的回答。我实际上尝试过,但它对我不起作用。即使查询失败,该文件也始终为空。这是我的查询: result=$(impala-shell --quiet --delimited --ssl -i $impala_host -ku $user_id$impala_realm -q "set request_pool = $ request_pool;使用 $current_directory$ENV;使元数据 $tbl_name 无效;显示像 '$tbl_name' 这样的表;") 2>> /tmp/psk1/logsdb.txt 查看编辑后的答案。 result=$(...) 2>> ... 不起作用,因为重定向不在 impala-shell 的范围内。

以上是关于shell脚本错误问题的主要内容,如果未能解决你的问题,请参考以下文章

我在将我的 bash 命令转换为 shell 脚本中的 shell 脚本语法错误时遇到错误

Xcode 9.2 Shell 脚本调用错误

Shell 脚本调用错误 - Xcode 6

如何抑制 shell 脚本错误消息?

转 MySQL shell脚本执行错误 $' ':command not found

Shell 脚本分段错误 - AWS