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博客 ” ,链接:http://blog.itpub.net/29313086/viewspace-1724210/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/29313086/viewspace-1724210/

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值