shell--读书笔记--《shell高级编程》--第一部分--第二章

来源:互联网 发布:耽美网络剧怎么发行 编辑:程序博客网 时间:2024/04/30 06:41

1 shell 脚本其实就是一堆系统命令列在一个文件中,它可以使你少敲一些字。

2 Example 2-1 清除:清除/var/log 下的 log 文件
Script#######################################
1 # Cleanup
2 # 当然要使用 root 身份来运行这个脚本
3
4 cd /var/log
5 cat /dev/null > messages
6 cat /dev/null > wtmp
7 echo “Logs cleaned up.”

##########################End

Script#########################################

3改良后的脚本
Example 2-2 清除:一个改良的清除脚本

##########################Start

Script#######################################
1 #!/bin/bash
2 # 一个 Bash 脚本的正确的开头部分.
3
4 # Cleanup, 版本 2
5
6 # 当然要使用 root 身份来运行.
7 # 在此处插入代码,来打印错误消息,并且在不是 root 身份的时候退出.
8
9 LOG_DIR=/var/log
10 # 如果使用变量,当然比把代码写死的好.
11 cd $LOG_DIR
12
13 cat /dev/null > messages
14 cat /dev/null > wtmp
15
16
17 echo “Logs cleaned up.”
18
19 exit # 这个命令是一种正确并且合适的退出脚本的方法.

##########################End

Script#########################################

4
Script#######################################
1 #!/bin/bash
2 # 清除, 版本 3
3
4 # Warning:
5 # ——-
6 # 这个脚本有好多特征,这些特征是在后边章节进行解释的,大概是进行到本书的一半的
7 # 时候,
8 # 你就会觉得它没有什么神秘的了.
9 #
10
11
12
13 LOG_DIR=/var/log
14 ROOT_UID=0 # $UID 为 0 的时候,用户才具有根用户的权限
15 LINES=50 # 默认的保存行数
16 E_XCD=66 # 不能修改目录?
17 E_NOTROOT=67 # 非根用户将以 error 退出
18
19
20 # 当然要使用根用户来运行
21 if [ “$UID” -ne “$ROOT_UID” ]
22 then
23 echo “Must be root to run this script.”
24 exit $E_NOTROOT
25 fi
26
27 if [ -n “$1” ]
28 # 测试是否有命令行参数(非空).
29 then
30 lines=$1
31 else
32 lines=$LINES # 默认,如果不在命令行中指定
33 fi
34
35
36 # Stephane Chazelas 建议使用下边
37 #+ 的更好方法来检测命令行参数.
38 #+ 但对于这章来说还是有点超前.
39 #
40 # E_WRONGARGS=65 # 非数值参数(错误的参数格式)
41 #
42 # case “$1” in
43 # “” ) lines=50;;
44 # [!0-9]) echo “Usage: `basename $0` file-to-cleanup”; exit $E_WRONGARGS;;
45 # * ) lines=$1;;
46 # esac
47 #
48 #* 直到”Loops”的章节才会对上边的内容进行详细的描述.
49
50
51 cd $LOG_DIR
52
53 if [ `pwd` != “$LOG_DIR” ] # 或者if[ “$PWD” != “$LOG_DIR” ]
54 # 不在 /var/log 中?
55 then
56 echo “Can’t change to $LOG_DIR.”
57 exit $E_XCD
58 fi # 在处理 log file 之前,再确认一遍当前目录是否正确.
59
60 # 更有效率的做法是
61 #
62 # cd /var/log || {
63 # echo “Cannot change to necessary directory.” >&2
64 # exit $E_XCD;
65 # }
66
67
68
69
70 tail -$lines messages > mesg.temp # 保存 log file 消息的最后部分.
71 mv mesg.temp messages # 变为新的 log 目录.
72
73
74 # cat /dev/null > messages
75 #* 不再需要了,使用上边的方法更安全.
76
77 cat /dev/null > wtmp # ‘: > wtmp’ 和 ‘> wtmp’具有相同的作用
78 echo “Logs cleaned up.”
79
80 exit 0
81 # 退出之前返回 0,返回 0 表示成功.
82 #

##########################End

Script#########################################

6

##########################Start

Script#######################################
1 E_WRONG_ARGS=65
2 script_parameters=”-a -h -m -z”
3 # -a = all, -h = help, 等等.
4
5 if [ $# -ne $Number_of_expected_args ]
6 then
7 echo “Usage: `basename $0` $script_parameters”
8 # basename $0是这个脚本的文件名
9 exit $E_WRONG_ARGS
10 fi

##########################End

Script########################################

0 0
原创粉丝点击