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

第二十五章 深入讨论 <<

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

发送信号的格式: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" 2
function keyboardIntHandler(){
    echo "CTRL_C pressed !"
}

while [ 1 ]
do
    sleep 2
done

eval

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

执行含有命令的字符串:

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

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

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

key_value_pair 的内容:

key_one     time
key_two     love
key_three   mum

脚本kv_eval的内容:
#!/bin/bash
while read NAME TYPE
do
    eval `echo "${NAME}"="${TYPE}"`
done < key_value_pair
echo "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操作,实践。

时间: 2024-08-24 09:44:46

Linux Unix shell 编程指南学习笔记(第五部分)的相关文章

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

第一章:文件安全与权限: 1.文件和目录的权限 创建文件时系统保存了文件所有相关的信息,包括 文件的位置 . 文件类型 . 文件长度 . 哪位用户拥有该文件,哪些用户可以访问该文件 . i 节点 . 文件的修改时间 . 文件的权限位 . 文件类型: d: 目录 l : 符号链接(指向另一个文件) s: 套接字文件 b: 块设备文件 c: 字符设备文件 p: 命名管道文件 -: 不属于上述类型的文件 文件权限 XXX       XXX        XXX 最左边 XXX : 文件属主 权限位

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

第十六章  shell脚本介绍 此章节内容较为简单,跳过. 第十七章   条件测试 test命令 expr命令 test  格式  test  condition     或者  [ condition ]  (注意: condition两侧有空格) 文件状态测试: - d 目录 : - s 文件长度大于0.非空 : - f 正规文件 - w 可写 : - L 符号连接 : - u 文件有s u i d位设置 - r 可读 : - x 可执行 测试的逻辑操作符: -a   :逻辑与,操作符两边均

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

第十三章  登陆环境 登陆系统时,输入用户名和密码后,如果验证通过,则进入登录环境. 登录过程 文件/etc/passwd $HOME.profile 定制$HOME.profile /etc/passwd 文件解析(抽取其中的一行作为示例): 1 2 3 4 5 6 7 root: <span style="white-space:pre"> </span>x: 0: 0: root: <span style="white-space:pre&

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

第七章  正则表达式介绍 匹配行首与行尾 匹配数据集 职匹配字母和数字 句点 "." 匹配任意单字符. ^,在行首 匹配字符串或字符序列,如查询当前目录下的所有目录: ls -l | grep "^d" 在行尾以 "$"匹配字符串或字符  , 匹配所有以sh结尾的行: sh$ 匹配所有的空行: ^$ 使用*匹配字符串中单字符或重复序列: skdf*jl 使用 \ 转义特殊字符的含义: 特殊字符:   $  .   ''  '   *  [  ]

Linux与Unix shell编程指南(完整高清版).pdf

找到一本很详细的Linux Shell脚本教程,其实里面不光讲了Shell脚本编程,还介绍了系统的各种命令 http://vdisk.weibo.com/s/yVBlEojGMQMpv 本书共分五部分,详细介绍了shell编程技巧,各种UNIX命令及语法,还涉及了UNIX下的文字处理以及少量的系统管理问题.本书内容全面.文字简洁流畅,适合Shell编程人员学习.参考. 目      录 译者序 前言 第一部分   shell 第1章   文件安全与权限 1 1.1   文件 1 1.2   文件

“Linux Shell编程”视频学习笔记

一.Linux Shell基础编程 视频1 1.1.查看你系统shell信息 $ cat /etc/shell 命令可以获取Linux系统里面有多少种shell程序 $ echo $SHELL 命令可以查看当前你所使用的shell是哪一个 1.2.查看文件信息,ls $ ls -l 查看文件信息:文件类型.文件权限.文件硬链接数.文件所属用户.文件所属组.文件大小.文件最近修改时间.文件名 1.3.改变文件权限,chmod 只有root用户或者文件的所有者能改变文件的权限 例子:$ chmod

Hive编程指南学习笔记(1)

hive一次使用命令: $ hive -e "select * from mytable limit 1;" OK name1 1 name2 2 Time taken: 3.935 seconds $ hive -e "select * from mytable limit 1;" > /tmp/myfile $ cat /tmp/myfile OK name1 1 name2 2 Time taken: 3.935 seconds 静默模式: $ hive

JavaScript面向对象编程指南——学习笔记1

第1章 引言 1.1 回顾历史 1.2 变革之风 1.3 分析现状 1.4 展望未来 1.5 面向对象的程序设计 1.5.1 对象(属性和方法的集合) 1.5.2 类 (相似对象的共同特征,如麻雀.老鹰都是鸟类) 1.5.3 封装 (将属性和方法集合起来,也有封闭作用域的概念,如封装一个播放器对象) 1.5.4 聚合 (将几个对象合并成一个对象) 1.5.5 继承 (一个实例对象继承父级对象的一些属性和方法) 1.5.6 多态 (一个对象调用其他对象的方法,call和apply) 1.6 OPP

Hive编程指南学习笔记(2)

我们可以使用describe extended financial.employee命令来查看这个表的详细表结构信息(如果当前所处的工作数据库就是financial,那可以不佳finanacial). 如果使用formatted替代关键字extended的话,那可以得到更多的输出信息. 如果用户只想查看某一列的信息,那么只要在表名后增加这个字段的名称即可.这种情况下,使用extended关键字也不会增加更多的输出信息: hive> describe financial.employee.sala