如何解决如何记录bash shell脚本中变量的错误
我有一个工作脚本,该脚本可以运行并检查客户端正在运行的操作系统,然后运行与检查客户端与主服务器的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命令,这是错误的。
- 启动命令后,您会看到不满意的结果。
在第一种情况下,错误结果进入基本错误流,称为1
。可以捕获错误并将其写入日志文件,例如这样(我更喜欢将>>
添加到日志文件中,而不是从头开始创建):
command 1>>logfile_error.txt
对于第二种情况,您有类似的东西:
bad_result=$(command)
// check that the result is bad indeed
bad_result >>logfile_error.txt
(在第二种情况下,基本错误流不立即相关)
很明显,您可以将两者结合在一起:
bad_result=$(command 1>>logfile_error.txt)
...
bad_result >>logfile_error.txt
,
除了输出重定向之外,您可能还需要有条件地决定应捕获/打印的内容。
..so您可能会对执行命令后使用的返回码感兴趣,该命令可以通过 $?
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
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。