linux菜鸟求教使用shell做判断后,然后输出文本
下面的脚本可以查询一台linux主机最近重启的时间,并输出。
#!/bin/bash
rundays=`cat /proc/uptime| awk '{printf $1 / 86400}'`
runhour=`cat /proc/uptime| awk '{printf ($1 % 86400)/3600}'`
runmin=`cat /proc/uptime| awk '{printf ($1 % 3600)/60}'`
runsec=`cat /proc/uptime| awk '{printf $1 % 60}'`
printf("系统已运行:%d天%d时%d分%d秒",run_days,run_hour,run_minute,run_second)}'
输出结果如:系统已经运行:34天11时53分13秒
问题:我想先做一下判断,如果是最近3个小时以内重启的主机,我就输出结果;如果大于3个小时的,我就不再输出结果了。请高手帮忙写一下,谢谢了。在线等。。。。
------解决方案--------------------#!/bin/bash
totalsec=`cat /proc/uptime
------解决方案-------------------- awk '{print $1}'`
totalsec=${totalsec%.*}
if [ $totalsec -gt 10800 ];then
exit -1
fi
rundays=`expr $totalsec / 86400`
runhour=`expr $totalsec % 86400 / 3600`
runmin=`expr $totalsec % 3600 / 60`
runsec=`expr $totalsec % 60`
echo "系统已运行:$rundays天$runhour时$runmin分$runsec秒"
------解决方案--------------------楼上脚本有部分问题:
1、if [ $runhour -lt 3 ]中,$runhour可能为小数,所以必须使其为整数形式,
2、printf 使用格式有点小问题
如果改成以下形式,应该就没问题了
#!/bin/bash
rundays=`awk '{printf "%d",$1 / 86400}' /proc/uptime`
runhour=`awk '{printf "%d",($1 % 86400)/3600}' /proc/uptime`
runmin=`awk '{printf "%d",($1 % 3600)/60}' /proc/uptime`
runsec=`awk '{printf "%d",$1 % 60}' /proc/uptime`
if [ $runhour -lt 3 ]; then
printf "系统已运行:%d天%d时%d分%d秒\n" $rundays $runhour $runmin $runsec
fi
------解决方案--------------------
#!/bin/bash
rundays=`awk '{printf "%d", $1 / 86400}' /proc/uptime`
runhour=`awk '{printf "%d", ($1 % 86400)/3600}' /proc/uptime`
runmin=`awk '{printf "%d", ($1 % 3600)/60}' /proc/uptime`
runsec=`awk '{printf "%d", $1 % 60}' /proc/uptime`
totalsec=`awk -F. '{print $1}' /proc/uptime`
if [ $totalsec -lt 10800 ]; then
printf "系统已运行:%d天%d时%d分%d秒\n" $rundays $runhour $runmin $runsec
fi
这样就行了