繁体   English   中英

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

[英]How do I log errors from variables in a bash shell script

我有一个工作脚本,它会检查客户端正在运行的操作系统,然后运行与检查客户端与主服务器的 NTP 偏移量差异相关的代码。

我想在 NTP 命令周围添加一些错误日志记录,但不知道从哪里开始。 任何指针将不胜感激。

#!/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

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

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

在第一种情况下,错误结果 go 变为基本错误 stream,称为1 错误可以被捕获并写入日志文件,就像这样(我使用>>因为我更喜欢将 append 写入日志文件,而不是从头开始重新创建):

command 1>>logfile_error.txt

对于第二种情况,你有类似的东西:

bad_result=$(command)
// check that the result is bad indeed
bad_result >>logfile_error.txt

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

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

bad_result=$(command 1>>logfile_error.txt)
...
bad_result >>logfile_error.txt

除了 output 重定向之外,您可能还想有条件地决定应该捕获/打印什么。 ..所以您可能有兴趣使用执行命令后给出的返回码,可以通过使用$?

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

只是一个用法示例:
(不是真正的“好” - 在没有进一步测试的情况下用记事本重写,但仍然可能对你有帮助 - 可能会更好)

#!/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 

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM