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操作。实践。
Linux Unix shell 编程指南学习笔记(第五部分)的更多相关文章
- Linux Unix shell 编程指南学习笔记(第四部分)
第十六章 shell脚本介绍 此章节内容较为简单,跳过. 第十七章 条件測试 test命令 expr命令 test 格式 test condition 或者 [ conditio ...
- Linux Unix shell 编程指南学习笔记(第三部分)
第十三章 登陆环境 登陆系统时.输入username和password后.假设验证通过.则进入登录环境. 登录过程 文件/etc/passwd $HOME.profile 定制$HOME.profi ...
- Linux Unix shell 编程指南学习笔记(第二部分)
第七章 正則表達式介绍 匹配行首与行尾 匹配数据集 职匹配字母和数字 句点 "." 匹配随意单字符. ^,在行首 匹配字符串或字符序列,如查询当前文件夹下的全部文件夹: ls - ...
- Linux 与 unix shell编程指南——学习笔记
第一章 文件安全与权限 文件访问方式:读,写,执行. 针对用户:文件属主,同组用户,其它用户. 文件权限位最前面的字符代表文件类型,常用的如 d 目录:l 符号链 ...
- Linux与Unix shell编程指南(完整高清版).pdf
找到一本很详细的Linux Shell脚本教程,其实里面不光讲了Shell脚本编程,还介绍了系统的各种命令 http://vdisk.weibo.com/s/yVBlEojGMQMpv 本书共分五部分 ...
- 摘自《Linux与unix shell编程指南》
shift运行后,$#随之减少:如果需要知道命令行中输入的最后一个参数(通常是一个文件名),可以有两种选择:使用命令 eval echo \$$#;使用shift命令:shift 'expr $# - ...
- Linux与unix shell编程指南
第14章 环境和shell变量 1.使用变量时,尽量用花括号将之括起来,防止shell误解变量值. 2.设置变量时的不同模式 variable-name=value 设置实际值到variable-na ...
- maven权威指南学习笔记(五)—— POM
1. 简介 Archetype插件通过 pom.xml 文件创建了一个项目.这就是项目对象模型 (POM),一个项目的声明性描述. 当Maven运行一个目标的时候,每个目标都会访问定 义在项目POM里 ...
- maven POM —— maven权威指南学习笔记(五)
1. 简介 Archetype插件通过 pom.xml 文件创建了一个项目.这就是项目对象模型 (POM),一个项目的声明性描述. 当Maven运行一个目标的时候,每个目标都会访问定 义在项目POM里 ...
随机推荐
- iptables 简单介绍及应用 Linux防火墙
iptables 即 Linux防火墙 的简单介绍及使用 iptables生效位置如下图: 其中, 网络防火墙也可以使用一台启用了iptables的Linux主机代替; 路由器或集线器等设施在拓扑中省 ...
- 联想lenovo 家用电脑安装win7 无法引导问题(新电脑安装系统时提示File:\Boot\BCD错误解决方案)
安装方式 : 1.进入 PE 2.用 EasyimageX 恢复 GHO镜像 3.重启后出现 原因: 主要 是安装win7 时,格式 化选择为GUID模式. 处理: win7 以后,格式华时选择MB ...
- jQuery基本操作以及与js的一些比较
jQuery和js主要区别在DOM操作 用jQuery必须先引进jQuery.js文件 js和jQuery写在哪: 1.标签里面 常用就是方法调用 2.写在script标签里面 3.js文件 dom操 ...
- 【BZOJ3678】Wangxz和OJ
题意: 不想讲 题解: Rope真香! 正解是Splay缩点,访问时再拆成一个序列 代码: //STL dafa good! #include<algorithm> #include< ...
- 小程序自定义tabbar
代码片段: wechatide://minicode/IUoCyemJ7D3d GitHub: https://github.com/WozHuang/Miniprogram-Demo/tree/ma ...
- 虚拟机VM安装Linux系统CentOS7
第一步:安装一个VM虚拟机: 百度VM,使用普通下载,一路Next即可 如果需要输入序列号,可以网上随意找一个,目前是个人可以随意激活,但如果做商业用途的话,还是最好买一个序列号,我在网上搜到的:5A ...
- 【转】C#添加修改删除文件文件夹大全
[转]C#添加修改删除文件文件夹大全 C#添加修改删除文件文件夹大全 StreamWriter sw = File.AppendText(Server.MapPath(".")+& ...
- 榨取kkksc03 luogu1855 dp 裸二维费用背包
首先对于这个题目背景,,个人认为很(you)好(qu),,, 核心就是一个裸的二维费用背包,刚刚学习的同学参见dd大牛的背包九讲 #include <cstdio> #include &l ...
- bzoj1055: [HAOI2008]玩具取名(dp)
1055: [HAOI2008]玩具取名 题目:传送门 简要题意: 就是固定四个字母,给出这四个字母分别可以由哪两个字母组成,然后在给你一个字符串,要求把这个字符串还原成原始的四个字母的其中一个. 题 ...
- php中命名空间和use
php中命名空间和use 总结 php中的namespace就有点像java中package包的概念 php中的use的概念就是用别人的命名空间中的类 php中的include enquire是引入文 ...