C0201 删除一个文件中的所有内容

1. 删除一个文件中的所有内容, 简单版

#!/bin/bash

# =================================================
# delete content from log file
# =================================================

LOG_DIR=/var/log

cd $LOG_DIR
cat /dev/null > messages

# : > messages 与上边的命令意义相同
cat /dev/null > wtmp

echo "Logs cleaned up.

 

这里边有个思想, 间接的力量, 首先定义一个 LOG_DIR=/var/log, 这样以后可以做到想修改目录时, 即删除其他目录的文件, 那么只要修改这一处就可以了, 同样道理, 最好连文件名也是用参数传递进来的.

 

2. 删除一个文件中的所有内容, 复杂版

#!/bin/bash

LOG_DIR=/var/log
ROOT_UID=0        # $UID 为0, 用户才具有权限
LINES=50            # 默认的保存行数
E_XCD=66           # 不能修改目录?
E_NOTROOT=67    # 非root用户将以 error 退出

 

# 增加判断内容  -------------------------------------------------------------------

if [ "$UID" -ne "$ROOT_UID" ]; then

$UID 这个变量, 系统已经默认定义了, 所以有很多变量系统已经为我们定义好了
    echo "Must be root to run this script."
    exit $E_NOTROOT
fi

if [ -n "$1" ]; then        # 测试是否有命令行参数
    lines=$1
else
    lines=$LINES            # 默认, 如果不在命令行中指定
fi

# 下面是更好的方法检验命令行参数

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" ]
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 message > mesg.temp  # 保存 log file 消息的最后部分

# 不是全部删除, 先通过重定向, 保存一部分内容

mv mesg.temp messages

 

cat /dev/null > wtmp

echo “Logs cleaned up.”

 

exit 0

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值