072011
 

第五部分 高级Shell编程技巧

二十五、<< 的更多用法

使用:
    cat >> newfile << TAG
    Hello, everyone! 
    It's rainy outside.
    TAG
可以快速的将一段话放入新建立的一个文件,本例中为newfile。

如果一个脚本,按次序依次接收一些参数,那么可以用<<实现自动化输入:
    /usr/bin/my-own.sh << MAYDAY
    1
    3
    2
    MAYDAY

二十六、Shell工具与trap信号

日期时间函数date,date +%格式" "%格式。。。
    %d Day
    %m Month
    %y 两位数年份
    %Y 四位数年份
    %A 星期几
    %R 12:01
    %T 12:01:49

信号
    1    SIGHUP    挂起或父进程被杀死    Ctrl+D或exit命令
    2    SIGINT    键盘中断   Ctrl+C
    3    SIGQUIT   从键盘退出
    9    SIGKILL   无条件中止
    11   SIGSEGV   段(内存)冲突
    15   SIGTERM   软件终止(缺省杀进程)
可以使用kill -信号号码 pid 杀进程
    或者kill -s SIGKILL pid

使用trap捕捉信号
    trap "command" SIG1 SIG2 …
    其中command是捕捉到信号后要执行的函数名称,SIG1是指要捕捉的信号数字。
        特例,只捕捉不处理:trap "" 2 3
        特例,取消信号捕捉:trap 2 3


使用eval来执行字符串中的命令:
    多复杂都可以,因为eval可以多次扫描执行该字符串。
    例如一个文件有两列:
        PC        486
        MONITOR  svga
    现在希望第一列编程变量名,第二列变成变量值,即$PC=486。可以如下方式实现:
        #!/bin/sh
        while read NAME TYPE
        do
            eval  `echo "${NAME}=${TYPE}"`
        done < data
        echo "You have a $PC pc, with a $MONITOR monitor."
    这样,eval第一次扫描时,使语句变成NAME=PC, TYPE=486,第二次使PC=486。
    注意eval后面有个空格。

logger命令
    logger -p 优先级1 message
    在系统日志中记录优先级为优先级1的日志。优先级有notice等等。

二十七、几个脚本例子


二十八、Unix系统的运行级别、服务的自启动停止

运行级别脚本放在/etc/init.d中。
每个级别N(N=0 to 6)的脚本放在/etc/rcN.d/中。通过符号链接,指向init.d中的真正文件。

通过who -r命令可以看到当前系统的运行级别:
    返回格式为:运行级别  最后一次重启时间
通过runlevel命令可以看到上次和本次的运行级别。

运行级别:
0    启动或重启系统
1    单用户模式,系统维护模式
2    多用户模式,部分网络功能开启,正常模式
3    多用户模式,正常模式
4    用户定义的模式
5    X-window模式或者维护模式,系统之间有差异
6    重启模式

运行级别脚本的命名:
SnnScript_name   自启动的脚本,启动顺序依照nn的数值,从小到大启动
KnnScript_name   自结束的脚本,结束顺序依照nn的数值,从大到小结束

这些脚本都至少能够接受start和stop两个参数。

系统启动时,init进程通过查询inittab文件确定运行级别脚本所在的位置,并依据脚本命名依次启动它们。关机时依次注销。Ubuntu不适用,它使用Upstart来启动(我也没找到)。

二十九、cgi脚本

三十、附录 常用的Shell命令

basename
    从全路径中分离出文件名。
dirname
    从全路径中分离出路径,不含文件名。
cat
    显示文件
    -v 显示控制字符
cp option f1 f2
    复制文件
    -i 提示是否覆盖
    -r 递归复制
    -p 保留原来的权限和修改时间
diff
    比较文件异同
dircmp
    比较文件夹异同
    -s 不显示相同的文件
du options directory
    显示文件夹使用情况
    -a 显示文件大小
    -s 显示总和
file
    确定文件类型
fuser options file
    -u 显示所有访问该文件或文件系统的进程
    -k 杀死所有访问该文件或文件系统的进程
logname
    显示当前登录名
mkdir/rmdir
    创建/删除目录
nl
    显示行号
    nl myscript > newscript 可以添加行号
rm
    删除文件
    -r 删除目录
    -i 提示是否删除
shutdown
    关闭系统
sleep x
    休眠x秒钟
touch
    新建文件
    -t MMDDhhmm 设置文件创建时间
strings
    提取二进制文件中的字符串
uname -a
    显示系统信息
wc
    -c 统计字符数
    -l 统计行数
    -w 统计单词数
whereis command_name
    返回命令所在的路径和手册路径
who
    显示所有登录的用户
    -r 显示当前运行级别和启动时间
whoami
    显示当前用户名

    

 Leave a Reply

(必须填写)

(必须填写,邮件地址不会被泄露)

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>