Linux Unix shell 编程指南学习笔记(第五部分) – sun

第二十五章 深入讨论 <<

当shell 看到 << 的时候,它知道下一个词是一个分界符,该分界符后面的内容都被当做输入,直到shell又看到该分界符(位于单独的一行)。比如:

cat >> tmpfile <<DOC> this is the first line> this is the second line> third> forth>.....>DOC

其中DOC就是分界符,再次在新的行中输入DOC时,表示输入已经完成。

快速创建一个文件

自动进入菜单

ftp传输(实例操作)

连接到其他应用系统 (实例操作)

快速创建文件

cat >> tmpfile <<delimiter(加入tab键后有的系统不能识别) 或者 cat >> tmpfile <<-delimiter

快速创建打印文档 (输入文档后,按enter键自动送往打印机): lpr << qc

第二十六章 shell工具

创建以日期命名的文件及临时文件

信号

trap命令以及如何捕获信号

eval命令

logger命令

使用date命令创建文件:

date格式: date [option] +%format (详情请自己查阅 date –help)

工作中经常会定义一些属于自己的文件格式下面就以 XXX_XXX_日期信息.log创建文件:

其中日期信息的命令 date +%Y_%m_%d:%H:%M:%S.%N

创建文件的命令:>XXX_XXX_`date +%Y_%m_%d:%H:%M:%S.%N`.log ,ls将看到如下文件:

XXX_XXX_2014_10_17:08:30:21.128727204.log

创建唯一的临时文件: 使用 $$(进程号) 创建脚本运行中 唯一的临时文件(系统中进程号是唯一的),退出程序时删除临时文件 。

信号

信号就是系统向脚本或命令发出的消息。常用信号及其含义表(kill -l 显示所有的信号):

信号<span style="white-space:pre"></span>信号名含义 1SIGHUP挂起或父进程被杀死 2SIGINT来自键盘的中断信号,通常是< CTRL-C> 3SIGQUIT从键盘退出 9SIGKILL无条件终止 11SIGSEGV段(内存)冲突 15SIGTERM软件终止(缺省杀进程信号)

发送信号的格式:kill [ -signal | -s signal ] PID[s]

杀死一个进程

关闭当前shell:kill -9 $$ (另外可以用 ps 查询进程信息)

检测信号

有些信号可以被程序或脚本捕获,但是有些信号不能被捕获(接收到信号9后就不能再接收其他信号)。

脚本中需要关注的信号是 1 SIGHUP 、2 SIGINT 、3 SIGQUIT 、15 SIGTERM

捕获到这些信号后交给系统处理,或者 由脚本或应用自行处理这些信号(需要用到trap命令)。

trap

trap 命令 可以在脚本中捕捉信号, trap name(捕捉到信号后的处理函数) signal(s)

trap常用方法举例:

trap "" 2 3忽略信号2和信号3,用户不能终止该脚本trap"commands" 2 3如果捕捉到信号2或3,就执行相应的c o m m a n d s命令trap 2 3复位信号2和3,用户可以终止该脚本也可以使用单引号(‘’)来代替双引号(“”);其结果是一样的。

下面给出一个监听键盘中断<CTRL_C>示例:

#!/bin/bash trap "keyboardIntHandler" 2function keyboardIntHandler(){    echo "CTRL_C pressed !"}while [ 1 ] do    sleep 2done

evaleval 使用域一次扫描无法实现其功能的变量——它首先会扫描命令行进行所有的置换 , 然后再执行命令。

执行含有命令的字符串:

#!/bin/bash NAME='cat Ctrl_c_Listener'echo -e  $NAME '\n\n'eval $NAME

从上述执行结果比较,发现eval 回显的是文件的内容,而不是name的字符串值。

对于一个仅仅存有名-值对的文件,使用eval可以将第一列作为变量,而第二列作为值,示例代码如下:

key_value_pair 的内容:key_one     timekey_two     lovekey_three   mum脚本kv_eval的内容:#!/bin/bash while read NAME TYPEdo    eval `echo "${NAME}"="${TYPE}"`done < key_value_pairecho "key_one's value is  ${key_one}"echo "key_two's value is  ${key_two}"

logger命令:

使用该命令之前最好先查阅联机手册(不同供应商提供的操作系统中该命令的语法不一样)。

logger命令格式: logger [ options ] message

ubuntu 12.04中的选项:

 -d, --udp             use UDP (TCP is default) -i, --id              log the process ID too -f, --file <file>     log the contents of this file -h, --help            display this help text and exit -n, --server <name>   write to this remote syslog server -P, --port <number>   use this UDP port -p, --priority <prio> mark given message with this priority -s, --stderr          output message to standard error as well -t, --tag <tag>       mark every line with this tag -u, --socket <socket> write to this Unix socket -V, --version         output version information and exit

第27章 几个脚本例子

pingall:一个按照/etc/hosts文件中的条目逐一ping所有主机的脚本。backup_gen:一个通用的备份脚本,能够加载缺省设置。del.lines:一个引用sed命令的脚本,能从文件中删除若干行。access_deny:一个能够阻止某些特定用户登录的工具。logroll:一个能够清除超过某一长度的日志的工具。nfsdown:一个快速unmount所有nfs文件系统的工具

实践。

第28章 运行级别脚本

如果希望在系统启动时自动运行某些应用程序、服务或脚本,或者在系统重启动时能够正确地关闭这些程序,那么需要创建运行级别脚本。

运行级别

确定当前的运行级别: who -r (linux 系统: runlevel 第一只个值是系统的前一个运行级别,第二只值是当前运行级别。)

inittab

系统启动过程中会启动init进程,该进程通过inittab的配置文件来查看需要启动哪些服务、应当进入哪一个运行级别。

inittab格式: id:rstart:action:process

id: 进程的唯一标识

rstart:运行该进程的级别

action:告诉init进程如何对待process所对应的进程。

process:实际要运行的命令。

第二十九章 cgi 脚本

cgi : common gateway interface (通用网关接口)。

连接web的协议:协议包括http、ftp、mailto、file、telnet和news。这里我们只关心http协议(超文本传输协议)。

该章主要讲解 web操作,实践。

你不勇敢,没人替你坚强!

Linux Unix shell 编程指南学习笔记(第五部分) – sun

相关文章:

你感兴趣的文章:

标签云: