一、case命令

case variable in
value1)

command(s)
;;

value2)

command(s)
;;

*)

command(s)
;;

esac

如果case变量没有被匹配,程序就执行*)后面的语句。
case值中允许出现Shell通配符和竖线(|)作为OR操作符

二、if命令

if command
then

command(s)

fi

if test expression
then

command(s)

fi

if [ string/numeric expression ]
then

command(s)

fi

if [[ string/numeric expression ]
then

command(s)

fi

if ((numeric expression))
then

command(s)

fi

注意:
1)if命令可以嵌套,在嵌套的情况下,fi命令总是和最近的if配对使用

2、if/else命令
if command
then

command(s)

else

command(s)

fi

3、if/elif/else命令
if command
then

command(s)

elif command

command(s)

elif command

command(s)

else

command(s)

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

echo $persons

done
IFS=$OLD_IFS

六、null命令

null命令用:表示,是一个内建的什么都不做的命令,返回状态值为0(真),通常用来建立无限循环。
例子:
if grep "hello" hello.txt
then

:

else

echo "not found!"

fi

七、shift命令

shift命令用来把位置参量向左位移指定次数,没有参数的shift命令则把参数变量表向左位移一位。
shift [n]

while (($#>0))
do

echo $*
shift

done

八、循环命令

Bash shell有四种循环:for 循环、while循环、until循环、select循环

1、for循环

for variable in word_list
do

command(s)

done

例子:
for pal in Tom Dick Harry Joe
do

echo "Hi $pal"

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

command(s)

done

例子:
num=0
while ((num<10))
do

let num+=1
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

command(s)

done

例子:
until who | grep linda
do

sleep 5

done
talk linda@dragonwings

num=0
until ((num>10))
do

let num+=1
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

command(s)

done

例子:
select name in chenjy panda xiaopang
do

echo "name=$name, REPLY=$REPLY"

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

echo $line

done >tmp$$

for i in 7 9 2 3 4 5
do

echo $i

done | sort -n

8、后台运行循环

循环可以在后台运行,程序可以不等待循环结束而连续运行。

例子:关键字done后面的&使得循环在后台运行。在循环运行的同时,程序继续运行。

#!/bin/bash
for person in bob jim joe sam
do

mail $person < memo

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

case $name in
x)
command(s);;
y)
command(s);;
n)
echo "The argument for -n is $OPTARG";;
\?)
command(s);;
esac;

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编程要点小结的更多相关文章

  1. abc高级bash shell编程

    http://www.pythoner.com/122.html     abc高级bash shell编程

  2. linux 10 -Bash Shell编程

    二十三. Bash Shell编程:     1.  读取用户变量:     read命令是用于从终端或者文件中读取输入的内建命令,read命令读取整行输入,每行末尾的换行符不被读入.在read命令后 ...

  3. 【shell编程基础0】bash shell编程的基本配置

    前面一篇“shell编程之变量篇”主要讲述下shell编程的变量的基本知识:设置变量的方式,自定义变量和环境变量的差别,变量的替换.删除.测试等. 这一篇主要是讲述在bash shell下的一些基本配 ...

  4. Bash shell编程的语法知识点(1)

    Bash shell脚本编程知识点如下(初学,不全,欢迎讨论补充): shell简介 脚本的简单介绍 变量和引用 算术运算 交互式编程 选择判断 条件测试 循环 函数 shell简介 shell是一种 ...

  5. Bash Shell编程简记

    Shell编程简记 经常在linux环境下开发的同学,难免要使用shell的一些命令或者编写小的脚本,我这里也总结和整理下,自己对Shell的理解和常用的一些shell脚本. 按照目录分为如下3个节: ...

  6. GNU Bash Shell 编程图解笔记

    bash,Unix shell的一种,在1987年由布莱恩·福克斯为了GNU计划而编写.1989年发布第一个正式版本,原先是计划用在GNU操作系统上,但能运行于大多数类Unix系统的操作系统之上,包括 ...

  7. bash/shell编程学习(3)

    接上节继续, 1. 从键盘读取输入内容 #!/bin/bash read -p 'please input something:' input echo 'your input:' $input 运行 ...

  8. bash/shell编程学习(2)

    先来复习上节重定向的用法: 1.快速清空文件 cat demo.txt < /dev/null 注:linux中有一个经典名言[一切皆文件],/dev/null可以认为是一个特殊的空文件,更形象 ...

  9. bash/shell编程学习(1)

    1)定义变量 myvar=abc #注:等号前后不能加空格 #或 myvar="abc" #或 myvar='abc' #注:如果变量后面的值中间本身没有空格,加不加引号都无所谓, ...

随机推荐

  1. [uva11992]Fast Matrix Operations(多延迟标记,二维线段树,区间更新)

    题目链接:https://vjudge.net/problem/UVA-11992 题意:n*m的矩阵,每次对一个子矩阵操作,有三种操作:加x,设置为x,查询.查询返回子矩阵和.最小值.最大值 n很小 ...

  2. java并发程序——Excutor

    概述 Excutor这个接口用的不多,但是ThreadPoolExcutor这个就用的比较多了,ThreadPoolExcutor是Excutor的一个实现.Excutor体系难点没有,大部分的关键点 ...

  3. js事件相关面试题

    说是面试题,其实也相当于是对js事件部分知识点的一个总结.简单内容一笔带过,了解详情我都给出了参考链接,都是之前写的一些相关文章.JavaScript本身没有事件模型,但是环境可以有. DOM:add ...

  4. jquery获取文件名称

    $("#fileupload").on("change",function(){ var filePath=$(this).val(); if(filePath ...

  5. PHP的学习记录

    这是我的第一次写博客,是一个PHP的初学者,刚刚开始之前是一点儿的都不懂,现在开始通过买些书籍回来学习,废话少说,开始记录笔记吧. 函数:函数的英文名为function,也就是功能的意思,在自定义函数 ...

  6. css浮动布局,浮动原理,清除(闭合)浮动方法

    css浮动 1.什么是浮动:在我们布局的时用到的一种技术,能够方便我们进行布局,通过让元素浮动,我们可以使元素在水平上左右移动,再通过margin属性调整位置 2.浮动的原理:使当前元素脱离普通流,相 ...

  7. js修改样式表规则

    <div>adasfsfs</div> <div id="div">adasfsfs</div> <div>adasfs ...

  8. CSS预编译器:Sass(入门),更快的前端开发

    SASs是由美国注册会计师协会(AICPA)下属审计准则委员会(ASB)发布,是为了便于注册会计师执行和落实一般公认审计准则(GAAS). Sass 扩展了 CSS3,增加了规则.变量.混入.选择器. ...

  9. 学习笔记:javascript内置对象:字符串对象

    1.字符串的创建   var str = "Hello Microsoft!";   2.字符串属性   constructor  返回创建字符串属性的函数   length    ...

  10. OpenCV探索之路(三):滤波操作

    滤波处理分为两大类:线性滤波和非线性滤波.OpenCV里有这些滤波的函数,使用起来非常方便,现在简单介绍其使用方法. 线性滤波:方框滤波.均值滤波.高斯滤波 方框滤波 #include<open ...