本文所示的删除/var/log下日志文件脚本源于abs这本书,虽然实际功能只是简单的清空该目录下的messages文件,但是这个脚本具有广义性,可以作为其他脚本的模板。
#!/bin/bash LOG_DIR=/var/log ROOT_UID=0 LINES=50 E_XCD=66 E_NOTROOT=67
为了更好的移植性,事先定义几个变量。比如用LOG_DIR指定日志所在目录,E_开头的变量为不同的错误码。
if [ "$UID" -ne "$ROOT_UID" ] then echo "Must be root to run this script." exit $E_NOTROOT fi if [ -n "$1" ] then lines=$1 else lines=$LINES fi
由于删除/var/log下的文件需要root身份,因此一开始先判断运行该脚本的用户是否为root。接着判断参数1是否为空,lines指定默认日志保留的行数。
cd $LOG_DIR if [ `pwd` != "$LOG_DIR" ] then echo "Can't change to $LOG_DIR." exit $E_XCD fi
判断是否成功进入了LOG_DIR所代表的目录。上述代码的更有效率的表示方法为:
# cd /var/log || { # echo "Cannot change to necessary directory." >&2 # exit $E_XCD; # }
最后才是实质性的日志删除功能:
tail -$lines messages > mesg.temp mv mesg.temp messages exit 0
最后只保留messages文件中lines行日志。
该脚本的功能虽然简单,但是却拥有用户身份检查、参数检查等功能,对其他脚本而言是个很好的模板。