![](/img/trans.png)
[英]How do I make the Awk work with Bash array variables in a shell script?
[英]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
重要的是要认识到有两种错误:
在第一种情况下,错误结果 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.