Bash Shell编程要点小结

一、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

[email protected]:~$ set -x //打开bash shell的调试功能
[email protected]:~$ 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循环

1、until循环形式:和while循环相反,当command退出值为非0时,执行循环体内的命令command(s),否则,退出循环
until command
do

command(s)

done

例子:
until who | grep linda
do

sleep 5

done
talk [email protected]

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

3)信号复位:在trap命令后面跟一个信号或者数字,可以把信号复位为默认动作。
$ trap 2

$ trap INT

$ trap - //复原所有信号,经实验无效

4)陷阱列表
$ trap

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

时间: 2024-12-24 14:37:04

Bash Shell编程要点小结的相关文章

GNU Bash Shell 编程图解笔记

bash,Unix shell的一种,在1987年由布莱恩·福克斯为了GNU计划而编写.1989年发布第一个正式版本,原先是计划用在GNU操作系统上,但能运行于大多数类Unix系统的操作系统之上,包括Linux与Mac OS X v10.4都将它作为默认shell.它也被移植到Microsoft Windows上的Cygwin与MinGW,或是可以在MS-DOS上使用的DJGPP项目.在Novell NetWare与Andriod在上也有移植.1990年后,Chet Ramey成为了主要的维护者

Bash shell编程基础

1.何谓shell script shell script是利用shell的功能写一个"程序",这个程序是使用纯文本文件,将一些shell的语法与命令(包括外部命令)写在里面,搭配正则表达式,管道命令与数据流重定向,条件判断语句等功能,以达到我们所想要的处理目的. 2.脚本或程序源文件都是纯文本文件. 3.脚本或程序的执行一般有两种方式: 编译执行:预处理-->编译-->汇编-->链接:编译执行是一种计算机语言的执行方式. 由编译程序将目标代码一次性编译成目标程序,再

Bash shell 编程

一.Bash shell是什么 shell是什么,Bash与shell又有什么关系.(以前我也不是特别清楚~~~~) shell 是一个交互性命令解释器.shell独立于操作系统,这种设计让用户可以灵活选择适合自己的shell.shell让你在命令行键入命令,经过shell解释后传送给操作系统(内核)执行. shell 是一个命令处理器(command processor)--是一个读入并解释你输入的命令的程序.除了是一个命令中断器以外,shell还是一个程序设计语言.你可以编写shell可以解

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

Bash shell脚本编程知识点如下(初学,不全,欢迎讨论补充): shell简介 脚本的简单介绍 变量和引用 算术运算 交互式编程 选择判断 条件测试 循环 函数 shell简介 shell是一种具备特殊功能的程序,提供了用户与内核进行交互操作的一种接口,它接收用户输入的命令,并把它送入内核去执行,shell分为图形界面和命令界面(我们操作的window系统就是一种图形化shell,我们要学的bash也是she一种命令界面的shell). shell与内核和用户的关系图如下: bash sh

bash shell编程

命令行编辑: 光标跳转 ^a 跳到命令行首 ^e 跳到命令行尾 ^<- 向左跳转一个单词 ^-> 向右跳转一个单词 ^b    左移一个字符 ^f    右移一个字符 删除 ^u 删除光标至命令行首的内容 ^k 删除光标至命令行尾的内容 ^d 删除光标所在处的字符 ^h  = BackSpace功能 ^l  清屏 Bang (!) 命令 !!     执行上一条命令 !blah    执行最后一次以blah开头的命令 !$    上一条命令的最后一个参数 (Esc+. 和Alt+.都是效果相同

Linux Bash Shell编程快速入门

BASH 的基本语法 最简单的例子 -- Hello World! 关于输入.输出和错误输出 BASH 中对变量的规定(与 C 语言的异同) BASH 中的基本流程控制语法 函数的使用 2.1     最简单的例子 -- Hello World! 几乎所有的讲解编程的书给读者的第一个例子都是 Hello World 程序,那么我们今天也就从这个例子出发,来逐步了解 BASH. 用 vi 编辑器编辑一个 hello 文件如下: #!/bin/bash# This is a very simple

bash shell编程快速入门教程

Shell 俗称壳(用来区别于核),是指"提供使用者使用界面"的命令解析器(软件).它类似于DOS下的command和后来的cmd.exe.它接收用户命令,然后调用相应的应用程序. 同时,Shell又是一种程序设计语言.作为命令语言,它交互式解释和执行用户输入的命令,或者自动地解释和执行预先设定好的一连串的命令.Shell不像C/C++等语言,它不需要编译就能执行.作为程序设计语言,Shell 定义了各种变量和参数,并提供了许多在高级语言中才具有的控制结构,包括循环和分支. UNIX系

零基础学习云计算及大数据DBA集群架构师【Linux Bash Shell编程及系统自动化2015年1月20日周三】

老师讲的所有实验记录 1.写一个脚本,判断用户是否存在,如果存在则删除.若不存在,就提示不存在. 2.三个数字比大小,输出最大的 3.三个数字比大小,并且按从大到小排列 4.画斜线正反 5.达到如下效果 * *** ***** ******* ********* 6.写一个9*9乘法表 7.画一个平行四边形 8.连乘算法 while和until 9.要求根据userlist创建用户,要求指定用户名,用户id,用户的附加组及变更用户u密码,若对应用户的附加组不存在,则将附加组创建出来后再根据要求添

bash/shell编程学习(3)

接上节继续, 1. 从键盘读取输入内容 #!/bin/bash read -p 'please input something:' input echo 'your input:' $input 运行效果: ./read1.sh please input something:123 your input: 123 2. while循环及case分支 #!/bin/bash printf '\nplease input a number or character, press "q" o