Bash Shell编程要点小结
一、case命令
case variable in
value1)
;;
value2)
;;
*)
;;
esac
如果case变量没有被匹配,程序就执行*)后面的语句。
case值中允许出现Shell通配符和竖线(|)作为OR操作符
二、if命令
if command
then
fi
if test expression
then
fi
if [ string/numeric expression ]
then
fi
if [[ string/numeric expression ]
then
fi
if ((numeric expression))
then
fi
注意:
1)if命令可以嵌套,在嵌套的情况下,fi命令总是和最近的if配对使用
2、if/else命令
if command
then
else
fi
3、if/elif/else命令
if command
then
elif command
elif command
else
fi
注意:
1)elif=else if,但elif不需要fi命令对应了
2)else块被称为默认块
三、eval命令
eval命令可以对命令行求值,做shell替换,并执行命令行。通常在普通命令行解析不能满足要求时使用。
例子:
$ set a b c d
$ echo The last argument is\$$#
The last argument is $4
$ eval echo The last argument is\$$#
The last argument is d
cb@cb-K43SV:~$ set -x //打开bash shell的调试功能
cb@cb-K43SV:~$ eval echo The last argument is \$$#
+ eval echo The last argument is '$4'
++ echo The last argument is d
The last argument is d
四、exit命令
exit命令结束脚本返回命令行。
exit命令可以带一个返回值参数,0表示顺利退出,否则,非正常退出。
exit命令的返回值保存在$?变量中。
五、IFS域分隔符
shell的内部域分隔符可以是空格、制表符和换行符,它可以作为命令的分隔符用在read、set、for等命令中。
在修改IFS之前,最好将原始的IFS保存在另一个变量中。
names=Tom:Dick:Harray:John
OLD_IFS=$IFS
IFS=":"
for persons in $names
do
done
IFS=$OLD_IFS
六、null命令
null命令用:表示,是一个内建的什么都不做的命令,返回状态值为0(真),通常用来建立无限循环。
例子:
if grep "hello" hello.txt
then
else
fi
七、shift命令
shift命令用来把位置参量向左位移指定次数,没有参数的shift命令则把参数变量表向左位移一位。
shift [n]
while (($#>0))
do
shift
done
八、循环命令
Bash shell有四种循环:for 循环、while循环、until循环、select循环
1、for循环
for variable in word_list
do
done
例子:
for pal in Tom Dick Harry Joe
do
done
for file in memo[1-5] #world_list可以是正则表达式,但文件必须存在才能展开,否则不展开
do
done
for file #word_list为空,自动循环位置参量,等效于for file in $*
do
done
2、while循环
while循环形式:当command退出状态值为0时,执行循环体内的命令command(s),直到command退出状态值非0
while command
do
done
例子:
num=0
while ((num<10))
do
echo "num=$num"
done
while "$answer" != "Bill Clinton"
do
done
while [ -n "$go" ] #-n:字符串长度非0
do
done
while true #true命令是Linux中退出状态值永远为0的命令
do
done
3、until循环
until循环形式:和while循环相反,当command退出值为非0时,执行循环体内的命令command(s),否则,退出循环
until command
do
done
例子:
until who | grep linda
do
done
talk linda@dragonwings
num=0
until ((num>10))
do
echo "num=$num"
done
4、select循环
select循环的主要作用是建立菜单,数字化的菜单显示在标准错误上,PS3(默认为#?)提示用户输入。
输入的是菜单序号,并被保存到REPLY中。
如果REPLY变量为空,将会重新显示菜单。
变量COLUMN表示终端上显示的用select命令建立的菜单的列宽度,默认80。
变量LINES控制菜单在终端上的垂直显示的行数,默认为24;当LINES=1时,菜单将在一行上显示。
break命令或CTL+C退出循环。
select var in wordlist
do
done
例子:
select name in chenjy panda xiaopang
do
done
输出:
1) chenjy
2) panda
3) xiaopang
#?
5、break命令
内建的break命令用来从循环中强形退出,但是不退出程序。
break可以用一个数字作为参数,指定强行退出的循环层数。如果有三层循环,最外层的循环为3,中间的为2,最里层的为1。
break [n] n默认值为1
6、continue命令
continue [n] n默认值为1
如果某些条件为真,continue命令控制跳转到循环的顶部,所有continue命令后面的语句都将被忽略。
如果用一个数字作为参数,控制就可以在指定的任何层的循环顶部重新开始执行。如果有三层循环,最外面的循环号为3,中间层为2,最里层为1。
7、循环中的IO重定向
文件中的输入可以通过管道重定向给一个循环,循环的输出也可以重定向给一个文件或通过管道重定向给其它程序。Shell启动一个子shell来处理IO重定向和管道。
cat file | while read line
do
done >tmp$$
for i in 7 9 2 3 4 5
do
done | sort -n
8、后台运行循环
循环可以在后台运行,程序可以不等待循环结束而连续运行。
例子:关键字done后面的&使得循环在后台运行。在循环运行的同时,程序继续运行。
#!/bin/bash
for person in bob jim joe sam
do
done &
九、文件检验操作符
常用文件检验操作符,可分为四类:
1、文件读写执行权限检验
-r filename 文件可读
-w filename 文件可写
-x filename 文件可执行
2、文件存在检验
-e filename 文件存在
-d filename 目录存在
-f filename 非目录普通文件存在
3、文件类型检验
-b filename 块文件
-c filename 字符文件
-L filename 符号链接
4、文件大小检验
-s filename 文件尺寸非0
十、陷阱trap命令
trap命令允许你控制程序在收到信号以后的行为。当接收到指定的信号数字后,就执行trap命令中用引号引用的命令。
信号:由一个进程发送给另一个进程的,或者在特定的健按下后由操作系统发送给进程的,又或者在异常情况下发生时由数字组成的非同步消息。
trap命令格式:
trap 'command;command' signal-number
trap 'command;command' signal-name
注意:
1、Shell总共读取两次命令字符串,一次是在设置trap的时候,一次是在信号到达的时候。
2、如果命令字符串被双引号引用,在第一次设置trap时执行变量和命令替换。如果用的是单引号,则等到信号到达trap开始执行时,才看执行变量和命令替换。
3、陷阱的设置对于脚本来说是全局的。
例子:
1、信号列表
$ trap -l
1) SIGHUP 2) SIGINT 3) SIGQUIT 4) SIGILL 5) SIGTRAP
6) SIGABRT 7) SIGBUS 8) SIGFPE 9) SIGKILL 10) SIGUSR1
11) SIGSEGV 12) SIGUSR2 13) SIGPIPE 14) SIGALRM 15) SIGTERM
16) SIGSTKFLT 17) SIGCHLD 18) SIGCONT 19) SIGSTOP 20) SIGTSTP
21) SIGTTIN 22) SIGTTOU 23) SIGURG 24) SIGXCPU 25) SIGXFSZ
26) SIGVTALRM 27) SIGPROF 28) SIGWINCH 29) SIGIO 30) SIGPWR
31) SIGSYS 34) SIGRTMIN 35) SIGRTMIN+1 36) SIGRTMIN+2 37) SIGRTMIN+3
38) SIGRTMIN+4 39) SIGRTMIN+5 40) SIGRTMIN+6 41) SIGRTMIN+7 42) SIGRTMIN+8
43) SIGRTMIN+9 44) SIGRTMIN+10 45) SIGRTMIN+11 46) SIGRTMIN+12 47) SIGRTMIN+13
48) SIGRTMIN+14 49) SIGRTMIN+15 50) SIGRTMAX-14 51) SIGRTMAX-13 52) SIGRTMAX-12
53) SIGRTMAX-11 54) SIGRTMAX-10 55) SIGRTMAX-9 56) SIGRTMAX-8 57) SIGRTMAX-7
58) SIGRTMAX-6 59) SIGRTMAX-5 60) SIGRTMAX-4 61) SIGRTMAX-3 62) SIGRTMAX-2
63) SIGRTMAX-1 64) SIGRTMAX
2、设置信号陷阱
$ trap 'rm tmp*;exit 1' 0 1 2 15
或
$ trap 'rm tmp*;exit 1' EXIT HUP INT TERM
3、忽略信号
$ trap "" 1 2
4、信号复位:在trap命令后面跟一个信号或者数字,可以把信号复位为默认动作。
$ trap 2
或
$ trap INT
5、陷阱嵌套
$ trap 'trap 2' 2
设置用户按两次Control-C终止程序。第一次陷阱捕捉信号,第二个陷阱复位信号2的默认动作-杀死进程
十一、getopts命令
当脚本需要一些命令行选项时,位置参量不是总有效的,因为有的选项需要指定参数,而位置参量无法区分。
bash内嵌函数getopts能够处理带参数的选项
1、基本用法
while getopts :xyn: name
do
x)
done
说明:
1)x、y和n都是选项。选项x前面有一个冒号:,选项n后面有一个冒号:
2)选项前面的冒号:告诉getopts静默错误报告
3)选项后面的冒号:表示选项需要一个用空格与它间隔开的参数,参数是非破折号开头的单词。-n选项就需要参数。
4)没有破折号的选项告诉getopts已经到了选项清单的末尾。当getopts没有参数可处理时,返回一个非0退出状态值,导致while循环终止。
5)每次调用getopts时,它把从位置参量读取的合法选项赋值给指定的变量(例子中为name),如果不合法,就把问号?赋值给变量。
6)选项参数保存在变量OPTARG中。
7)变量OPTIND初始值为1,并在getopts每处理完一个命令行参数后增加1,因此$OPTIND=$#+1。
=-=-=-=-=
Powered by Blogilo
Bash Shell编程要点小结的更多相关文章
- abc高级bash shell编程
http://www.pythoner.com/122.html abc高级bash shell编程
- linux 10 -Bash Shell编程
二十三. Bash Shell编程: 1. 读取用户变量: read命令是用于从终端或者文件中读取输入的内建命令,read命令读取整行输入,每行末尾的换行符不被读入.在read命令后 ...
- 【shell编程基础0】bash shell编程的基本配置
前面一篇“shell编程之变量篇”主要讲述下shell编程的变量的基本知识:设置变量的方式,自定义变量和环境变量的差别,变量的替换.删除.测试等. 这一篇主要是讲述在bash shell下的一些基本配 ...
- Bash shell编程的语法知识点(1)
Bash shell脚本编程知识点如下(初学,不全,欢迎讨论补充): shell简介 脚本的简单介绍 变量和引用 算术运算 交互式编程 选择判断 条件测试 循环 函数 shell简介 shell是一种 ...
- Bash Shell编程简记
Shell编程简记 经常在linux环境下开发的同学,难免要使用shell的一些命令或者编写小的脚本,我这里也总结和整理下,自己对Shell的理解和常用的一些shell脚本. 按照目录分为如下3个节: ...
- GNU Bash Shell 编程图解笔记
bash,Unix shell的一种,在1987年由布莱恩·福克斯为了GNU计划而编写.1989年发布第一个正式版本,原先是计划用在GNU操作系统上,但能运行于大多数类Unix系统的操作系统之上,包括 ...
- bash/shell编程学习(3)
接上节继续, 1. 从键盘读取输入内容 #!/bin/bash read -p 'please input something:' input echo 'your input:' $input 运行 ...
- bash/shell编程学习(2)
先来复习上节重定向的用法: 1.快速清空文件 cat demo.txt < /dev/null 注:linux中有一个经典名言[一切皆文件],/dev/null可以认为是一个特殊的空文件,更形象 ...
- bash/shell编程学习(1)
1)定义变量 myvar=abc #注:等号前后不能加空格 #或 myvar="abc" #或 myvar='abc' #注:如果变量后面的值中间本身没有空格,加不加引号都无所谓, ...
随机推荐
- DirectFB 之 分段动画
动画动态配置 一套素材的目录结构一般如下: 子目录中的图片名称都是以数字命名,比如,1,2, 3, 4,-- 而配置文件animation.cfg的格式如下: #width height ...
- Lua调试:getinfo详解
getinfo是调试Lua程序时一个很重要很常见的函数,主要用于获取函数调用的基本信息.这个函数的难点在于各个参数的含义.下面一一介绍. 一.函数简介: 1.原型:getinfo(level, arg ...
- Android NDK开发之C调用Java及原生代码断点调试(二)
上一篇中,我们主要学习了Java调用本地方法,并列举了两大特殊实例来例证我们的论据,还没学习的伙伴必须先去阅读下,本次的学习是直接在上一篇的基础上进行了.点击:Android NDK开发之从Java与 ...
- JavaScript知识点整理 (二)
1)函数概述 1.函数是一块 JS 代码,被定义一次,但可以执行和调用多次. JS 中的函数也是对象,所以 JS 函数可以像其它对象那样操作和传递,所以也常叫 JS 中的函数为函数对象. 2.函数也是 ...
- zabbix监控docker
[toc] 1.下载模版 然后把模版放到/usr/local/lib/zabbix/agent下 github地址内含监控模版 2.修改 zabbix-agentd 配置文件 vim /usr/loc ...
- Oracle 12C 新特性之非分区表转分区表online clause(不停业务+索引有效)
12c以前非分区表需要转换为分区, 如果不停业务的话可以使用在线重定义,只有在表进行切换的时候会有短暂的锁表. 12c 中alter table online clause 实现了表上现有的索引有效, ...
- jQuery之筛选操作
jQuery之筛选操作 筛选操作分三大类:过滤,查找,串联 eq(),first(),last(),hasClass(),filter(),is() html代码 jQuery代码 效果如下: map ...
- 使用Fiddler进行http抓包和调试
本文目录 : Fiddler的工作原理 Fiddler的常用操作 支持https解密分析 Fiddler的断点调试 本文小结 参考文献 俗话说:工欲善其事,必先利其器. Fiddler是windows ...
- CopyOnWriteArrayList实现原理及源码分析
CopyOnWriteArrayList是Java并发包中提供的一个并发容器,它是个线程安全且读操作无锁的ArrayList,写操作则通过创建底层数组的新副本来实现,是一种读写分离的并发策略,我们也可 ...
- springcloud(五):熔断监控Hystrix Dashboard和Turbine
Hystrix-dashboard是一款针对Hystrix进行实时监控的工具,通过Hystrix Dashboard我们可以在直观地看到各Hystrix Command的请求响应时间, 请求成功率等数 ...