第二十五章 深入讨论 <<

当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 编程指南学习笔记(第五部分)的更多相关文章

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

    第十六章  shell脚本介绍 此章节内容较为简单,跳过. 第十七章   条件測试 test命令 expr命令 test  格式  test  condition     或者  [ conditio ...

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

    第十三章  登陆环境 登陆系统时.输入username和password后.假设验证通过.则进入登录环境. 登录过程 文件/etc/passwd $HOME.profile 定制$HOME.profi ...

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

    第七章  正則表達式介绍 匹配行首与行尾 匹配数据集 职匹配字母和数字 句点 "." 匹配随意单字符. ^,在行首 匹配字符串或字符序列,如查询当前文件夹下的全部文件夹: ls - ...

  4. Linux 与 unix shell编程指南——学习笔记

    第一章    文件安全与权限 文件访问方式:读,写,执行.     针对用户:文件属主,同组用户,其它用户.     文件权限位最前面的字符代表文件类型,常用的如         d 目录:l 符号链 ...

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

    找到一本很详细的Linux Shell脚本教程,其实里面不光讲了Shell脚本编程,还介绍了系统的各种命令 http://vdisk.weibo.com/s/yVBlEojGMQMpv 本书共分五部分 ...

  6. 摘自《Linux与unix shell编程指南》

    shift运行后,$#随之减少:如果需要知道命令行中输入的最后一个参数(通常是一个文件名),可以有两种选择:使用命令 eval echo \$$#;使用shift命令:shift 'expr $# - ...

  7. Linux与unix shell编程指南

    第14章 环境和shell变量 1.使用变量时,尽量用花括号将之括起来,防止shell误解变量值. 2.设置变量时的不同模式 variable-name=value 设置实际值到variable-na ...

  8. maven权威指南学习笔记(五)—— POM

    1. 简介 Archetype插件通过 pom.xml 文件创建了一个项目.这就是项目对象模型 (POM),一个项目的声明性描述. 当Maven运行一个目标的时候,每个目标都会访问定 义在项目POM里 ...

  9. maven POM —— maven权威指南学习笔记(五)

    1. 简介 Archetype插件通过 pom.xml 文件创建了一个项目.这就是项目对象模型 (POM),一个项目的声明性描述. 当Maven运行一个目标的时候,每个目标都会访问定 义在项目POM里 ...

随机推荐

  1. How Javascript works (Javascript工作原理) (八) WebAssembly 对比 JavaScript 及其使用场景

    个人总结: webworker有以下三种: Dedicated Workers 由主进程实例化并且只能与之进行通信 Shared Workers 可以被运行在同源的所有进程访问(不同的浏览的选项卡,内 ...

  2. luogu P2252 取石子游戏(威佐夫博弈)

    题意 题解 对于像我这种不知道威佐夫博弈的人来说,拿到题就开始打表了. 然而打完后并没有发现什么. 然后才知道是威佐夫博弈. 结论是当(int)((b-a)*((sqrt(5.0)+1.0)/2.0) ...

  3. [洛谷P3939]数颜色

    题目大意:有n个物品,每个物品有一个颜色.现在有两种操作:1.查询l-r内有多少颜色为c的物品并输出.2.将第x个物品和第x+1个交换.现在让你实现这些操作. 解题思路:首先一共有300000种颜色, ...

  4. IDEA设置控制台日志 不换行

    最新版的IDEA设置控制台不自动换行位置如下:Setting->Editor->General->Console,不要勾选下图项即可.

  5. POJ 1161 Walls(最短路+枚举)

    POJ 1161 Walls(最短路+枚举) 题目背景 题目大意:题意是说有 n个小镇,他们两两之间可能存在一些墙(不是每两个都有),把整个二维平面分成多个区域,当然这些区域都是一些封闭的多边形(除了 ...

  6. Geany IDE搭建

    http://blog.sina.com.cn/s/blog_567e650201010x5e.html

  7. JAVA关于byte数组与String转换的问题

    1 public class ToString{ public static void main(String[] args){ String aa = "hellow"; byt ...

  8. 阿里云CentOS系统配置iptables防火墙

    虽说阿里云推出了云盾服务,但是自己再加一层防火墙总归是更安全些,下面是我在阿里云vps上配置防火墙的过程,目前只配置INPUT.OUTPUT和FORWORD都是ACCEPT的规则 一.检查iptabl ...

  9. ios面试题1

    iOS面试题   1.写一个NSString类的实现 + (id)initWithCString:(c*****t char *)nullTerminatedCString encoding:(NSS ...

  10. unix中文件I/O

    在unix中可用的文件I/O函数包含打开文件,读文件,写文件等. Unix系统中的大多数文件I/O须要用到5个函数:open,read,write,lseek,close. 这里要说明的是read,w ...