首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在bash shell脚本中记录来自变量的错误

如何在bash shell脚本中记录来自变量的错误
EN

Stack Overflow用户
提问于 2020-08-18 18:22:36
回答 2查看 46关注 0票数 0

我有一个工作脚本,它检查客户端正在运行什么O/S,然后运行与之相关的代码,检查客户端与主服务器的NTP偏移的差异。

我想在NTP命令周围添加一些错误日志,但不知道从哪里开始。如果有任何建议,我们将非常感谢。

代码语言:javascript
复制
#!/bin/bash


OS=`uname`

case $OS in
        [Linux]*)
Host=`hostname`
Offset=`ntpq -p | grep -e '*' | awk '{print $9}'`
Date=`date +%D`
CADate=`ntpdate -q 10.102.80.1 | awk '/nt/ {print $0}' | awk '{print $10}'`
TimeDiff=$(echo  $Offset - $CADate | bc )

#Output 
echo "$Host" "|" "$Date" "|" "$TimeDiff" > NTP.mif

        ;;
        [SunOS]*)
Host=`hostname`
Offset=`ntpq -p | tail -1 | awk '{print $9}'`
Date=`date +%D`
CADate=`ntpdate -q 10.102.80.1 | tail -1 | awk '{print $10}'`
TimeDiff=$(echo $Offset - $CADate | bc)

#Output
echo "$Host" "|" "$Date" "|" "$TimeDiff" > NTP.mif
        ;;
        [AIX]*)
Host=`hostname -s`
Offset=`ntpq -p | grep -e '*' | awk '{print $9}'`
Date=`date +%D`
CADate=`ntpdate -q 10.102.80.1 | awk '/nt/ {print $0}' | awk '{print $10}'`
TimeDiff=$(echo  $Offset - $CADate | bc )

#Output
echo "$Host" "|"  "$Date" "|" "$TimeDiff" > NTP.mif
        ;;
esac
EN

回答 2

Stack Overflow用户

发布于 2020-08-18 18:58:47

重要的是要认识到有两种类型的错误:

  • 您启动一个UNIX/Linux命令,但出现错误。
  • 您启动一个命令,您会看到您不喜欢的结果。

在第一种情况下,错误结果转到基本错误流,称为1。可以捕获错误并将其写入日志文件,如下所示(我使用>>是因为我更喜欢附加到日志文件,而不是从头开始重新创建):

代码语言:javascript
复制
command 1>>logfile_error.txt

对于第二种情况,您的代码如下所示:

代码语言:javascript
复制
bad_result=$(command)
// check that the result is bad indeed
bad_result >>logfile_error.txt

(在第二种情况下,基本错误流不是直接相关的)

显然,您可以将两者结合起来:

代码语言:javascript
复制
bad_result=$(command 1>>logfile_error.txt)
...
bad_result >>logfile_error.txt
票数 0
EN

Stack Overflow用户

发布于 2020-08-19 02:18:38

除了输出重定向之外,您可能希望有条件地决定应该捕获/打印哪些内容。您可能有兴趣使用在执行命令后给出的返回码,该命令可以通过使用$?获得

https://www.tldp.org/LDP/abs/html/exit-status.html

https://www.tldp.org/LDP/abs/html/exit-status.html#FTN.AEN2981

这只是一个用法示例:

(不是一个真正“好”的版本-在记事本中重写,不需要进一步的测试,但仍然可能对你有帮助-可能会更好)

代码语言:javascript
复制
#!/bin/bash

Host=`hostname`
OS=`uname`
ntp_ip=10.102.80.1
Date=`date +%D`

Offset_data=`ntpq -p`
Offset_rc=$? # you can a
if [[ $Offset_rc -ne 0 ]]; then
  echo "Unable to.."
  #exit $Offset_rc # - uncomment if you don't want to continue 
                   #   with the script if your ntp command failed
fi

CADate_data=`ntpdate -q $ntp_ip`
if [[ $? -ne 0 ]]; then # direct return code check
  echo "Unable to..,"
fi

case $OS in
        [Linux]*)
Offset=`echo $Offset_data | grep -e '*' | awk '{print $9}'`
CADate=`echo $CADate_data | awk '/nt/ {print $0}' | awk '{print $10}'`
        ;;
        [SunOS]*)
Offset=`echo $Offset_data | tail -1 | awk '{print $9}'`
CADate=`echo $CADate_data | tail -1 | awk '{print $10}'`
        ;;
        [AIX]*)
Offset=`echo $Offset_data | grep -e '*' | awk '{print $9}'`
CADate=`echo $CADate_data | awk '/nt/ {print $0}' | awk '{print $10}'`
        ;;
esac

TimeDiff=$(echo $Offset - $CADate | bc )
#Output
echo "$Host" "|" "$Date" "|" "$TimeDiff" > NTP.mif 
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/63466633

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档