摘自《Linux与unix shell编程指南》
shift运行后,$#随之减少;
如果需要知道命令行中输入的最后一个参数(通常是一个文件名),可以有两种选择:使用命令 eval echo \$$#;使用shift命令:shift 'expr $# - 2'。
getopts 选项字符串 名称 [参数表]
每次使用时,getopts 都会把下一个选项放在shell变量名称中(如果名称不存在就初始化它),并把下一个要处理的参数的下标放在变量 OPTIND 中。如果某个选项需要参数,getopts 就把该参数放在变量 OPTARG 中。Shell不会自动把 OPTIND 重置;如果在同一个shell中多次调用 getopts 时要使用新的参数,则必须手动重置它。处理完选项结尾时,getopts 会退出并返回一个大于零的状态;OPTIND 会指向第一个非选项参数的下标;而名称被设为“?”.getopts 可以通过两种方式报错。如果选项字符串的第一个字符是冒号,则忽略报错;正常情况下,如果遇到无效选项,或者忽略了选项的参数,就会打印诊断信息。如果遇到了无效的选项,getopts 就会在名称里面放入"?"。这时如果不忽略报错,就打印一条错误信息并重置 OPTARG;如果忽略报错,就把该选项放在 OPTARG 中而不打印错误信息。如果某个必要参数没有找到,并且 getopts 没有忽略报错,则在名称中放入问号"?" 并重置 OPTARG且打印错误信息。如果getopts 忽略错误,则在名称中放入冒号":",并把 OPTARG 设为找到的选项字符。
getopts一般格式为:
getopts option_string variable
在上述例子中使用脚本:
while getopts ahfgv OPTION
getopts查看所有以连字符开头的参数,将其视为选项,如果输入选项,将把这与option_string对比,如果匹配发现,变量设置为OPTION,如果未发现匹配字符,变量能够设置为?。重复此处理过程直到选项输入完毕。
错误信息提示并不明确,因此可以用自己的反馈信息屏蔽它,方法如下:
将冒号放在 option_string开始部分。
while getopts :ahfgvc: OPTION
在case语句里使用?创建一可用语句捕获错误。
shift `expr $OPTIND - 1`
if [ $# = 0]
then
.....
: [参数]
除了扩展参数和执行重定向外不做任何操作。返回状态是零。
: ${ANS:=$DEFAULT}
HOLD=HOLD.$$
grep -v $CODE $DBFILE >$HOLD
vi中,在命令模式下 :set nu显示行号。
set -n 读命令但并不执行。
set -v 显示读取的所有行。
set -x 显示所有命令及其参数。
将set选项关闭,只需用 +替代-。有人总认为+应该为开,而-应为关闭,但实际刚好相反。可以在脚本开始时将 s e t选项打开,然后在结束时关闭它。或在认为有问题的特殊语句段
前后打开及关闭它。
set可以用来改变shell选项或者设置位置参数,也可以显示shell变量的名称和值。
-n 读取命令但不执行。这可以用来检查脚本的语法。在交互式的shell中,这个选项会被忽略掉。助记词: No-execution, 不执行
-v 在shell读取输入行时把它打印出来。助记词:Verbose, 详细
-x 对于简单命令,for 命令,case 命令,select 命令,命令与其参数或者关联的单词列表里面的算术运算,则在扩展以后、执行之前,打印跟踪信息。在打印命令及其扩展过的参数之前,先打印扩展后的 PS4 变量。助记词: X, 跟踪
/usr/local/sybin/syb_backup >>$log_f 2>&1 <<MAYDAY
2
3
Y
MAYDAY
<<MAYDAY之后的内容就是手工运行syb_backup脚本所需要输入的内容,直到遇到另外一个MAYDAY结束。
最常用的信号及它们的含义。
信号 信号名 含义
1 SIGHUP 挂起或父进程被杀死
2 SIGINT 来自键盘的中断信号,通常是 <CTRL-C>
3 SIGQUIT 从键盘退出
9 SIGKILL 无条件终止
11 SIGSEGV 段(内存)冲突
15 SIGTERM 软件终止(缺省杀进程信号)
还有信号0,我们前面在创建.logout文件时已经遇到过。该信号为“退出shell”信号。为了发出信号0,只要从命令行键入exit,或在一个进程或命令行中使用<CTRL-D>即可。
trap [-lp] [参数] [信号指示]
当shell接收到信号指示中的信号时,就会读取和执行参数中指定的命令。如果省略了参数(这时只有一个信号指示)或者参数是"-",则每个指定信号的处理都重置为shell启动时的值。如果参数是空字符串,则shell及它所启动的命令会忽略每个信号指示指定的信号。
trap可以使你在脚本中捕捉信号。该命令的一般形式为:
trap name signal(s)
其中,name是捕捉到信号以后所采取的一系列操作。实际生活中,name一般是一个专门用来处理所捕捉信号的函数。Name需要用双引号( ”“ )引起来。 Signal就是待捕捉的信号。也可以使用单引号来代替双引号;其结果是一样的。
可以使用logger命令向/var/log/syslog发送消息:
bai@bbox:~$ ll /var/log/syslog
-rw-r----- 1 syslog adm 730 1月 29 23:17 /var/log/syslog
bai@bbox:~$ logger "sdfsfsf"
bai@bbox:~$ ll /var/log/syslog
-rw-r----- 1 syslog adm 764 1月 29 23:50 /var/log/syslog
bai@bbox:~$ tail -10 /var/log/syslog
Jan 29 19:07:05 bbox rsyslogd: [origin software="rsyslogd" swVersion="5.8.6" x-pid="619" x-info="http://www.rsyslog.com"] rsyslogd was HUPed
Jan 29 19:08:54 bbox anacron[1108]: Job `cron.daily' terminated
Jan 29 19:08:54 bbox anacron[1108]: Normal exit (1 job run)
Jan 29 19:17:01 bbox CRON[2898]: (root) CMD ( cd / && run-parts --report /etc/cron.hourly)
Jan 29 20:17:01 bbox CRON[3166]: (root) CMD ( cd / && run-parts --report /etc/cron.hourly)
Jan 29 21:17:01 bbox CRON[3384]: (root) CMD ( cd / && run-parts --report /etc/cron.hourly)
Jan 29 22:17:01 bbox CRON[3534]: (root) CMD ( cd / && run-parts --report /etc/cron.hourly)
Jan 29 23:17:01 bbox CRON[3786]: (root) CMD ( cd / && run-parts --report /etc/cron.hourly)
Jan 29 23:50:27 bbox bai: sdfsfsf
bai@bbox:~$
#save tty settings and hide characters typed in
SAVEDTTY=`stty -g`
stty -echo
....
stty $SAVEDTTY
-----待续
摘自《Linux与unix shell编程指南》的更多相关文章
- Linux与Unix shell编程指南(完整高清版).pdf
找到一本很详细的Linux Shell脚本教程,其实里面不光讲了Shell脚本编程,还介绍了系统的各种命令 http://vdisk.weibo.com/s/yVBlEojGMQMpv 本书共分五部分 ...
- Linux 与 unix shell编程指南——学习笔记
第一章 文件安全与权限 文件访问方式:读,写,执行. 针对用户:文件属主,同组用户,其它用户. 文件权限位最前面的字符代表文件类型,常用的如 d 目录:l 符号链 ...
- Linux与unix shell编程指南
第14章 环境和shell变量 1.使用变量时,尽量用花括号将之括起来,防止shell误解变量值. 2.设置变量时的不同模式 variable-name=value 设置实际值到variable-na ...
- Linux Unix shell 编程指南学习笔记(第五部分)
第二十五章 深入讨论 << 当shell 看到 << 的时候,它知道下一个词是一个分界符.该分界符后面的内容都被当做输入,直到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学习之Shell编程基础
转自:http://my.oschina.net/itblog/blog/204410 1 语法基本介绍1.1 开头 程序必须以下面的行开始(必须方在文件的第一行): #!/bin/sh 符号#!用来 ...
- linux下的Shell编程(3)shell里的流程控制
if 语句 if 表达式如果条件命令组为真,则执行 then 后的部分.标准形式: if 判断命令,可以有很多个,真假取最后的返回值 then 如果前述为真做什么 [ # 方括号代表可选,别真打进去了 ...
随机推荐
- 图标字体iconfont的使用
什么是iconfont? iconfont就是字面上的意思,叫做"字体图标",将一套图标集以字体文件的形式封装,并通过 CSS 的 @font-face 作为 Web Font 调 ...
- Welcome-to-Swift-21协议(Protocols)
协议定义了一个方法的蓝图,属性和其他适合特定任务或功能的要求.协议实际上并不提供一个这些要求的实现,它只是描述了一个实现会是什么样子.协议可以通过一个类,结构或枚举提供这些要求的具体实现.满足要求的任 ...
- 【bzoj2802】[Poi2012]Warehouse Store 贪心+堆
题目描述 有一家专卖一种商品的店,考虑连续的n天.第i天上午会进货Ai件商品,中午的时候会有顾客需要购买Bi件商品,可以选择满足顾客的要求,或是无视掉他.如果要满足顾客的需求,就必须要有足够的库存.问 ...
- getBoundingClientRect说明
getBoundingClientRect用于获取某个元素相对于视窗的位置集合. 1.语法:这个方法没有参数. rectObject = object.getBoundingClientRect() ...
- java面试题之什么是CAS
CAS,即Compare and Switch,比较-替换,里面有三个操作数:内存值V.旧的预期值A.要修改的值B: 当预期值A和内存值V相同时,才会将内存值修改为B并返回true,否则什么都不做并返 ...
- 【POJ1144】Network(割点)(模板)
题意:给定一张无向图,求割点个数 思路:感谢CC大神http://ccenjoyyourlife.blog.163.com/的讲解 割点的定义就是某个联通块中删去此点连通性发生变化的的点 有两种割点: ...
- postgresql-9.0.18-1-linux.run启动
下载地址:http://www.enterprisedb.com/products-services-training/pgdownload选择合适版本 基本都是下一步就可以到设置密码时记住密码以后要 ...
- HRBUST 2078:糖果(模拟,贪心)
题不难,但作为一道恶心到了我的题,我还是记录一下的好. 题意:n个人围一圈,要求:相邻两人,分数高的要比分数低的得到更多的糖果,若分数相同则必须得到相同数量的糖果.问满足要求的最少需要分配的糖果数.( ...
- Django学习笔记(12)——分页功能
这一篇博客记录一下自己学习Django中分页功能的笔记.分页功能在每个网站都是必要的,当页面因需要展示的数据条目过多,导致无法全部显示,这时候就需要采用分页的形式进行展示. 分页在网站随处可见,下面展 ...
- expect实现自动分发密钥、网站度量术语
1.优化ssh命令 sed -ir '13 iPort 52113\nPermitRootLogin no\nPermitEmptyPasswords no\n UseDNS no\nGSSAPIAu ...