首页 > 数据库 > Oracle > linux shell学习笔记1
例子 2-1. cleanup: 一个清空/var/log目录下的日志文件的脚本
#Cleanup
# 必须以root用户运行.
cd /var/log
cat /dev/null > messages
cat /dev/null > wtmp
echo "Logs cleaned up."
[root@dba shell]# ./2_1.sh
Logs cleaned up.
例子 2-2. cleanup: 一个改进版的cleanup脚本
#!/bin/bash
# Bash脚本正确的头部.
# Cleanup, 版本 2
# 需要以root运行.
# 如果不是root用户,在此处添加错误信息打印代码和退出代码.
LOG_DIR=/var/log
# 使用变量比使用硬编码(hard-coded)更好。
cd $LOG_DIR
cat /dev/null > messages
cat /dev/null > wtmp
echo "Logs cleaned up."
exit # 这是从一个脚本中退出正确合适的方法
[root@dba shell]# ./2_2.sh
Logs cleaned up.
[root@dba 第二章]# sh 2_3.sh
Logs cleaned up.
[root@dba 第二章]# cat 2_3.sh
#!/bin/bash
# Cleanup, 版本 3
# 注意:
# -------
# 这个脚本使用了相当多的特性,这些我们稍后将会解释.
#
# 到那时,你已经学了这本书的一半了,你将不会再对shell感觉神秘了。
#
LOG_DIR=/var/log
ROOT_UID=0 # 只有用户ID变量$UID值为0的用户才有root权限.
LINES=50 # 默认的行数
E_XCD=66 # 不能进入到目录时的退出代码值
E_NOTROOT=67 # 不是root用户时退出的代码值
#必须以root用户运行,以下进行检测
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 # Default, if not specified on command line.
fi
# Stephane Chazelas建议,
#+ 下面是一种更好的检测命令行参数的方法,
#+ 但是对于现在来说还是有些高级。
#
# E_WRONGARGS=65 # 不是数字参数 (参数格式不对)时的退出码
#
# case "$1" in
# "" ) lines=50;;
# *[!0-9]*) echo "Usage: `basename $0` file-to-cleanup"; exit $E_WRONGARGS;;
# * ) lines=$1;;
# esac
#
#* 可以跳到"循环"那章阅读开头一部分去了解上面的代码意思.
cd $LOG_DIR
if [ `pwd` != "$LOG_DIR" ] # 也可以用 if [ "$PWD" != "$LOG_DIR" ]
# 如果工作目录不在/var/log里?
then
echo "Can't change to $LOG_DIR."
exit $E_XCD
fi #在操作清空日志文件之前再次检查是否在正确的目录里
# 可以像下面再次确定是否在正确的目录里:
#
# cd /var/log || {
# echo "Cannot change to necessary directory." >&2
# exit $E_XCD;
# }
tail -$lines messages > mesg.temp # 保存message日志文件最后面几行日志信息到临时文件.
mv mesg.temp messages # 然后用临时文件覆盖messages日志文件
# cat /dev/null > messages
#* 上面这句把messages日志文件全部清空,这样没有上面那样保留最后几行安全
cat /dev/null > wtmp # ': > wtmp' and '> wtmp' have the same effect.
echo "Logs cleaned up."
exit 0
#
#一个脚本以0为退出代码表明脚本执行成功.
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/29313086/viewspace-1724210/ ,如需转载,请注明出处,否则将追究法律责任。