日期:2014-05-16  浏览次数:20590 次

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

------解决方案--------------------
引用:
现在需要的判断的是三小时之内打印出来,各位都没有判断天数,会不会有问题。是不是需要加上天数等于0的判断?


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

这样就行了