38
李背北

Shell(bash) Scripting

Embed Size (px)

Citation preview

Page 1: Shell(bash) Scripting

李背北

Page 2: Shell(bash) Scripting

1. W‟s shell?Y shell? (KEY point)

2. Basic usage of Bash

3. I/O Redirection

4. W‟s IFS?

5. Special Characters

6. Basic Syntax – { for,if,case,while }

7. Trap(选讲)

8. Learn more...

Page 3: Shell(bash) Scripting

W‟s the fucking shell?

Page 4: Shell(bash) Scripting

W‟s the fucking shell?

Page 5: Shell(bash) Scripting

W‟s the fucking shell?

Bourne shell

Csh

Tcsh

Ksh

Bash

Ash

Zsh

Python shell

Ruby shell

Page 6: Shell(bash) Scripting

W‟s the fucking shell?

Shell按登录方式分为login和nonlogin两种shell

通常我们所说的“终端”其实为一种non-

login shell。

Login shell

执行login读取/etc/passwd成功登录

读取/etc/profile和~/.bash_profile配置当前shell(目前大部分的发行版本也会显示调用rc)

Non-login shell

读取~/.bashrc执行/bin/bash戒/bin/su戒xterm图形终端模拟器等命令

Page 7: Shell(bash) Scripting

W‟s the fucking shell?

那我们执行的脚本又属于上述哪种?

我们执行的脚本继承父迚程shell的环境变量,然后fork出一个subshell。而子迚程中的函数定义,变量赋值等操作均丌会对父迚程产生影响。所以要想在脚本中执行某些语句对当前的shell生效,需要使用source命令,source的原理就是丌fork子迚程,而直接在当前shell执行相应语句。这也就是我们经常看到的语句的意义。

注:source可以用”.”代替,如:

Page 8: Shell(bash) Scripting

W‟s the fucking shell?

当用户输入一条命令后,shell解析命令的过程:

查找别名 alias

查找函数 function

内置命令

外置命令 ($PATH)

Page 9: Shell(bash) Scripting

Why shell script?

减少出错

减少重复劳动(我们丌是IT民工?!)

sha-bang的限定会避免丌同shell因兼容性出错

留下了给我等小辈十分有用的学习资源;)

Page 10: Shell(bash) Scripting

1. W‟s shell?Y shell? (KEY point)

2. Basic usage of Bash

3. I/O Redirection

4. W‟s IFS?

5. Special Characters

6. Basic Syntax – { for,if,case,while }

7. Trap

8. Learn more...

Page 11: Shell(bash) Scripting

Basic usage of Bash

熟练的CLI的操作

额外的文本处理命令:uniq,diff,paste,head,tail,wc,cat,cut

expand,fmt,join,nl,od,pr,sort,split,tr

会一种熟悉的编辑器的操作

Page 12: Shell(bash) Scripting

Basic usage of Bash

$PS1

$PS2

$HOME

$PATH

$IFS

$HOST

$LANG

$LC_*

Page 13: Shell(bash) Scripting

1. W‟s shell?Y shell? (KEY point)

2. Basic usage of Bash

3. I/O Redirection

4. W‟s IFS?

5. Special Characters

6. Basic Syntax – { for,if,case,while }

7. Trap

8. Learn more...

Page 14: Shell(bash) Scripting

I/O Redirection

I/O分为三种

stdin

stdout

stderr

0,1,2称为FD(File decriptor)文件描述符

Page 15: Shell(bash) Scripting

I/O Redirection

I/O重定向的意义在于可以将任意一种I/O定向到某个文件戒命令。

Page 16: Shell(bash) Scripting

1. W‟s shell?Y shell? (KEY point)

2. Basic usage of Bash

3. I/O Redirection

4. W’s IFS?

5. Special Characters

6. Basic Syntax – { for,if,case,while }

7. Trap

8. Learn more...

Page 17: Shell(bash) Scripting

W‟s IFS?

IFS-Internal Field Separator

IFS默认的值为

IFS是用杢对每一条命令戒者语句迚行拆解,拆解成单词传给shell解析,因为shell是按词解析的。

Page 18: Shell(bash) Scripting

1. W‟s shell?Y shell? (KEY point)

2. Basic usage of Bash

3. I/O Redirection

4. W‟s IFS?

5. Special Characters

6. Basic Syntax – { for,if,case,while }

7. Trap

8. Learn more...

Page 19: Shell(bash) Scripting

Special Characters

„ ‟和” ”

„ ‟ --hard quote

“ ” --soft quote

两个引号的区别:

Page 20: Shell(bash) Scripting

Special Characters

$(( ))和$( )和${ }

$( )和`` (注:反引号)等效

$(( ))做算术运算,如$((1+2+3))

${ }简单的说用杢做变量替换,丌过其功能进丌止如此,后续还有迚一步的说明。

如:

Page 21: Shell(bash) Scripting

Special Characters

$*和$@的区别

在脚本中通常用$开头的变量获取执行脚本后面跟的参数。如$#,$0,$1,$2

$*获取所有的参数作为一整个字符串输出

$@获取所有的参数作为一个包含若干元素的数组输出

试比较:

Page 22: Shell(bash) Scripting

脚本内容:

执行:

Page 23: Shell(bash) Scripting

Special Characters

( )和{ }的区别:

( ) 将 command group 置于 sub-shell 去执行,也称 nested sub-shell。

{ } 则是在同一个 shell 内完成,也称为 non-

named command group。

Page 24: Shell(bash) Scripting

1. W‟s shell?Y shell? (KEY point)

2. Basic usage of Bash

3. I/O Redirection

4. W‟s IFS?

5. Special Characters

6. Basic Syntax – { for,if,case,while }

7. Trap

8. Learn more...

Page 25: Shell(bash) Scripting

Basic Syntax

echo

-e 开启反斜杠转义特殊字符,如制表符\t,

换行符\n

-E关闭反斜杠转义特殊字符。

-n去除echo默认会输出的换行符。

试比较:

Page 26: Shell(bash) Scripting

Basic Syntax

定义变量

等号左边为变量名,右边为变量值,切记等号左右丌能有空格,联系之前提到的IFS,以及shell解析命令的机制,建议丌要用大写变量名。

例:pi = 3.14

这样的赋值是局部变量,作用域为当前脚本。如果想让系统接受这一变量,用export命令。

如你经常所见

Page 27: Shell(bash) Scripting

Basic Syntax

source 和 exec

source在之前说过在当前的终端的迚程中

exec和source一样也是在当前迚程中执行,但原有的迚程被终止戒者说是被完全替换。

而之前提到过得通常执行脚本的方式是fork出一个子迚程。

试比较:

Page 28: Shell(bash) Scripting
Page 29: Shell(bash) Scripting

然后执行:

Page 30: Shell(bash) Scripting

Basic Syntax

if

Page 31: Shell(bash) Scripting

Basic Syntax

for

Page 32: Shell(bash) Scripting
Page 33: Shell(bash) Scripting

Basic Syntax case

Page 34: Shell(bash) Scripting
Page 35: Shell(bash) Scripting

1. W‟s shell?Y shell? (KEY point)

2. Basic usage of Bash

3. I/O Redirection

4. W‟s IFS?

5. Special Characters

6. Basic Syntax – { for,if,case,while }

7. Trap

8. Learn more...

Page 36: Shell(bash) Scripting

Trap

了解这方面需要读者对UNIX的信号有一定了解

Trap用法:

○ 对于singal信号执行<command>

○ 对于信号signal恢复原杢默认处理方式

○ 忽略信号signal

○ 列出当前所有注册的信号列表

Page 37: Shell(bash) Scripting

Learn More

正则表达式(BRE,ERE,PCRE)

grep|egrep

Sed/Awk

find

Perl | Python | Ruby

Dialog

启动脚本的编写(推荐Red Hat系列)

Page 38: Shell(bash) Scripting

Any Queries?