SHELL程序设计.docx

上传人:b****1 文档编号:2374769 上传时间:2022-10-29 格式:DOCX 页数:15 大小:21.55KB
下载 相关 举报
SHELL程序设计.docx_第1页
第1页 / 共15页
SHELL程序设计.docx_第2页
第2页 / 共15页
SHELL程序设计.docx_第3页
第3页 / 共15页
SHELL程序设计.docx_第4页
第4页 / 共15页
SHELL程序设计.docx_第5页
第5页 / 共15页
点击查看更多>>
下载资源
资源描述

SHELL程序设计.docx

《SHELL程序设计.docx》由会员分享,可在线阅读,更多相关《SHELL程序设计.docx(15页珍藏版)》请在冰豆网上搜索。

SHELL程序设计.docx

SHELL程序设计

第五章SHELL程序设计

重点掌握

掌握shell程序设计的基本方法

掌握shell的变量定义、程序控制语句及调试方法

节标题

概述

运行shell程序的方法

Shell变量

Shell的算术运算及内部命令

程序控制语句

Shell程序调试

自定义shell

 

5.1概述

Shell编程的概念

命令语言

程序设计语言

Bash的命令格式

内部命令

可执行文件

 

5.2运行shell程序的方法

Shell程序的编辑工具

Bash程序的第一行为“#!

/bin/bash”

执行shell程序的方法

方法一

Bashshell_filename

方法二

Chmod命令将文件变为可执行的

直接输入文件名来执行文件

5.3Shell变量

Shell变量的基本类型

环境变量

用户自定义变量

位置参数

预定义变量

参数置换变量

 

5.3.2环境变量

定义

常用的shell环境变量

HOME

PATH

TERM

UID

PWD

PS1

PS2

IFS

LOGIN

SHELL

《具体说明》

1、更改环境变量

PATH=$PATH:

$HOME/bin

PATH=${PATH}:

/home/jhy/bin

2、配置历史命令环境

Bash使用主目录下的文件

.bash_history

设置环境变量

$HISTFILE=“/home/jhy/.myhistory”

$HISTSIZE=600

3、引号的使用(shell中的特殊字符)

双引号

除$、’、`、\以外的字符均为普通字符

catex3

echo“currentdirectoryis‘pwd‘

echo“homedirectoryis$HOME”

单引号

所有字符字符均为普通字符

$str=’echo“directoryis$HOME”’

倒引号

echo“directory‘$HOME‘“

4、命令执行操作符

1顺序执行:

命令之间用;号隔开

Exp:

who|wc-l

2逻辑与&&:

命令1&&命令2

命令1成功后执行命令2

Exp:

mkdir/ll&&cd/ll

Cpex1ex10&&rmex1

3逻辑或||:

命令1||命令2

命令1不成功后执行命令2

Exp:

mkdir/ll||cd/ll

5、成组命令

(1)大括号{…}形式:

大括号括起来的全部命令可视为语法上的一条命令

左大扩号后有空格

右大扩号前有;号

Notice:

此成组命令只在本SHELL内有效

Exp:

a=”aaaaa”

{a=”bbbb”;echo$a;}

(2)圆括号()形式:

左大扩号后无空格,右大扩号前无;号

不改变父shell的变量值及工作目录

Notice:

此成组命令只在子SHELL内有效

Exp:

a=”aaaaa”

{a=”bbbb”;echo$a;}

echo$a

5.3.3用户自定义变量

(1)语法规则

变量名=变量值

数组[下标]=值

说明:

等号两端不能保留空格

用单引号引用字符

定义变量时,变量名前不加$符号

(2)变量赋值

Exp:

Myname=sanju

Myname=‘sanjugnha’

 

(3)引用变量的值

(a)变量作为字符串存储时,两个变量连在一起

#x=hello

#y=world

#echo$x$y

(b)变量前后出现字符串时,变量用大扩号括起来。

$uid=501

$echo$uidofme不对

$echo${uid}ofme正确

(c)可设置变量为只读

readonly变量名

(d)变量的作用域:

局部变量与全局变量

#export变量名

EXP:

$ux=LINUX

$echo$ux

$vish

echo$ux

$bashsh

exportux

$bashsh

(4)命令替换

方法一:

用倒引号`

#dir=`pwd`

方法二:

$(用分号隔开的命令表)

$dir=$(pwd)

$echo$(pwd;cd/home/jhy;ls–l)

(5)数组

只有一位数组,且没有限定数组的大小

数组下标由0开始

下标可以是整数、算术表达式。

(a)定义

declare–a数组名

(b)赋值

格式1:

$数组名[下标]=值

格式2:

数组名=(值1值2。

)各值用空格隔开

(c)读值

${数组名[下标]}

(d)使用*、@作为下标代替数组中的所有元素

week=(123)

week[5]=5

week[4]=4

echo${week[*]}

(e)取消数组的定义

unsetweek[2]

unsetweek

unsetweek[*]

(6)变量引用

①数组变量的引用

${name[*]}与${name[@]}

“${name[*]}”与”${name[@]}”

2表达式${name#patten}和${name##patten}

cd/kk/mm

echo$PWD

echo${PWD#*/}

echo${PWD##*/}

3表达式${name%patten}和${name%%patten}

file=k.mm.c

echo{file%*.c}

echo{file%%*.c}

4表达式${#name[*]}表示数组中已设置的元素的个数

5表达式${#name[i]}表示数组中I个元素的长度

5.3.4位置参数

1、定义

linux中的shell可以带实参,变量名为0,1,2,叫位置参数。

各参数之间用空格隔开

ext m1 m2 m3

$0$1$2

2、用set为位置参数赋值(p196)

setkkss

cat$1$2$3|wc–l

其中,kk,ss为文件名

3、shift命令移动位置参数

位置参数右移一位

5.3.5预定义变量

1、定义

shell定义的有特殊含义的变量,用户不能更改

命名特点:

$符号

2、常见的预定义变量

(1)$#不包含脚本名的命令行中参数的个数

(2)$?

上一条命令执行后的返回值

(3)$0shell的执行命令名称

(4)$!

后台运行的最后一个进程号

(5)$*所有位置参数的名称

(6)$$当前进程的进程号

5.3.6参数置换变量

1、定义

用户根据条件的不同给变量赋不同的值

2、种类

(1)变量=${位置参数号-word}

有位置参数,置换变量。

否则,用word置换变量

dir=${1-$HOME}

(2)变量=${参数=word}

有参数,置换变量。

否则,用word置换变量

dir1=${DIR=$HOME}

(3)变量=${参数?

word}

有参数,置换变量。

否则,显示word并退出SHELL。

若无word,显示标准信息。

S=${2?

ggghhhhh}

(4)变量=${参数+word}

有参数,用word置换变量。

否则不进行置换。

5.4Shell的算术运算及内部命令

5.4.1算术运算

算术运算的命令:

1et

letarg…

Notice:

(1)arg是单独的算术表达式。

使用C语言中表达式的语法、优先级和结合性。

除++、·—和逗号(,)之外,所有整型运算符都得到支持。

Exp:

let“v=5*6”

Echo$v

(2)命名的参数可以在算术表达式中直接利用名称访问,不要前面带有“$”符。

(3)算术表达式按长整数进行求值,并不检查溢出。

(4)表达式中有特殊字符时,必须用双引号括起来。

Let“v=6|5”

Echo$v

(5)let命令的等价形式((…)),其中的算术表达式可不用双引号括起来。

Exp:

((v=6+9))

Echov

(6)可以用((算术表达式))取代let出现的地方,但只能包含一个算术表达式;只有使用$((算术表达式))才可返回其值。

Exp:

echo“$((6+9))”

Echo$[6+7]

5.4.2Shell的内部命令

1、echo

2、eval(命令的多重替换)

格式:

evalargumentlargument2...

将其后的参数组合起来,成为一个命令.然后执行若干个命令。

(可以利用别的命令作为参数)例如:

D=”ls–la”

eval$D/tmp

等价于

ls–la/tmp

3、exec

格式:

execcommandcommandargument

这个命令就是执行其后的命令,当执行完后,停止当前的进程,在exec命令后的命令都不会执行.

4、export

从父进程传递给子进程一个变量名/数值的列表.在父进程中,通过把用户定义的Shell变量放在命令export值后作为参数,这些变量可以由子进程来继承.但父进程不能访问子进程中的变量.其命令格式为:

export变量名

export变量名=变量值

Notice:

执行export命令可显示经export命令定义过的变量。

5、readonly

格式:

readonly=变量名

不带参数的readonly,将显示所有只读的shell变量

6、read

从标准输入中读取一行分成若干个字,并赋值给Shell程序中定义的变量.在读取到文件尾前,read返回值为0,表示读成功;当读到文件尾时.read返日值为1,表示读完.命令格式如下:

read变量名表

7、shift

shift命令使所有的位置参数依次向左移动一个位置,并使位置参敷的数量$0减1,直到零为止。

8、exit

9、.

使Shell读人指定的Shell程序文件并依次执行文件中所有的语句,就是说Shell程序文件中列出的所有命令都是在点命令中输入的.该命令格式如下:

.Shell程序文件名

当可执行程序的目录没有被放人系统目录时,用户希望运行可执行命令则必须使用:

./可执行程序名

Notice:

点命令就像交互式程序设计语言中的子程序调用。

5.5程序控制语句

5.5.1条件测试

1、概述

shell不用布尔表达式而用命令和字符串表达条件值

方法一:

用test语句

方法二:

用一对方括号将测试条件括起来

方法三:

[[测试条件]]

2、测试语句test

格式:

test表达式

(1)当表达式的值是真时,返回状态0

当表达式的值是假时,返回状态非0

(2)最好用双引号将test中出现的变量引起来

exp:

test–r“test1”

(3)可组合多个表达式,各表达式之间用逻辑运算符隔开。

Exp1–aexp2与运算

Exp1–oexp2或运算

!

exp非运算

Notice:

优先级的问题

(4)检测三种不同类型的表达式:

检验文件的特性、比较字符串、比较数值

检验文件的特性:

(P214)

test选项文件名

exp:

test–f“test1”检测test1文件是否是普通文件

比较字符串:

(P214)

字符串是普通字符串或变量

比较数值:

(P214)

2、if语句

格式:

if测试条件

then命令串1

else命令串2

fi

Notice:

(1)Else部分可以是elseif结构,用关

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 总结汇报 > 学习总结

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1