![vi 全屏幕编辑器的使用_第1页](http://file4.renrendoc.com/view/ee4df2e88cc15f748021e3a4654fdb82/ee4df2e88cc15f748021e3a4654fdb821.gif)
![vi 全屏幕编辑器的使用_第2页](http://file4.renrendoc.com/view/ee4df2e88cc15f748021e3a4654fdb82/ee4df2e88cc15f748021e3a4654fdb822.gif)
![vi 全屏幕编辑器的使用_第3页](http://file4.renrendoc.com/view/ee4df2e88cc15f748021e3a4654fdb82/ee4df2e88cc15f748021e3a4654fdb823.gif)
![vi 全屏幕编辑器的使用_第4页](http://file4.renrendoc.com/view/ee4df2e88cc15f748021e3a4654fdb82/ee4df2e88cc15f748021e3a4654fdb824.gif)
![vi 全屏幕编辑器的使用_第5页](http://file4.renrendoc.com/view/ee4df2e88cc15f748021e3a4654fdb82/ee4df2e88cc15f748021e3a4654fdb825.gif)
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
UNIX系统编辑器的概述vi的启动与退出光标与窗口的移动正文的增加、修改与删除重复和取消操作检索和替换其他命令vi全屏幕编辑器的使用一、UNIX系统编辑器的概述
ed:UNIX系统中原始的行编辑器。
ex:行编辑器,是ed
编辑器的扩充。
vi:全屏幕编辑器,为UNIX系统的主 要编辑器,它也是ed的超集。
emacs:全屏幕编辑器,不是UNIX系统版本4的组成部分,是独立的编辑程序。
vi的名字取自于visual。有两种操作方式:命令方式和输入方式命令方式下输入的大、小写是敏感的。1.1vi的应用方式命令方式输入方式编辑文本输入文本a,A,i,I,o,OESCvi二、
vi的启动与退出1、vi的启动
输入vi命令后,便进入全屏幕编辑环境,此时的状态为命令方式。①vi光标定在该缓冲区第一行第一列位置②viexample
光标定在缓冲区第一行第一列位置③
vi+example光标定在文件最后一行第一列位置④vi+Nexample
光标定位在文件第N行第一列的 位置(N:为数字)⑤
vi+/stringexample光标定位在文件中 第一次出现字符串string的行首位置
2、vi的退出
建议首先键入“ESC”键,以确保当前vi的状态为命令方式,输入下列命令,退出vi。
①
:w
将编辑缓冲区的内容写入文件
:q
退出vi
②
:wq
将上面两步操作可以合成一步来完成。③:x
功能同上。
④:q
退出vi,此时的正文没有被更改过。⑤:q!强行退出vi,使更新内容不写回文件。二、
vi的启动与退出(续)三、光标在窗口中移动注释
字
:
是由空格或标点符号分开的字母序列。
句子:是以句号(.)、问号(?)或感叹号(!)结束的字符序列,句子之间由两个 空格或一个回车分开。
段落:一个段落前后各有一个或多个空白行。三、光标在窗口中移动(续)1、
字符及行间移动
命令结果————————————————————
↑或k
向上移一行
↓或j
向下移一行
←或h
或退格键
左移一个字符
→或l
或空格右移一个字符
o
移到当前行的开始
$移到当前行的结尾+或回车符移到下一行的开始
-
移到上一行的开始三、光标在窗口中移动(续)2、
其它单位的移动
命令结果————————---------—————————
w
移到下一个字或标点符号
W
移到下一个字
e
移到这个字或标点符号的结束
E
移到字的下一结尾
b
回到字或标点符号的开始
B
移回到字的开始
)移到下一个句子的开始
(移到这个句子的开始
}移到下一段落的开始
{移到这一段落的上一开始四、在缓冲区中移动窗口
命令结果——-———--—------—————————
CTRL-F
向前(上)移动一满屏幕
CTRL-D
向前(上)移动半屏幕
CTRL-B
向后(下)移动一满屏幕
CTRL-U
向后(下)移动半屏幕
H光标移动到屏幕顶部
M光标移动到屏幕中间
L光标移动到屏幕底部
注意可在这些命令前加入数字n作为前缀,使相应命令执行n次。但nG使光标定位在第n行。五、光标在正文中的移动
命令结果——-———--—------—————————
G
光标移动到文件的尾部
nG光标移动到文件的第n行
:0光标移动到文件的第1行
:1光标移动到文件的第1行
:n光标移动到文件的第n行
:$光标移动到文件的尾部
/string
光标向前移动到string首
?string光标向后移动到string首
六、增加正本
命令结果——-———----------—------—————————
a
将输入文本插入在光标之后
A
将输入文本插入在当前行的行尾
i
将输入文本插入在光标之前
I
将输入文本插入在当前行的开始
o
将在当前行的下一行处打开一新行
O
将在当前行的上一行处打开一新行注意
ESC:使编辑状态从输入方式切换到命令方式七、修改正本
命令结果——-—---------------------—------—————————
r
替换当前字符,不需按ESC。
R
从当前字符开始进行替换,至ESC键为止。
nC
对从当前字符开始的n行字符进行替换,直至键入ESC键为止。
nc$
同nC。
ncw
对当前字符开始的n个字进行替换操作,直至键入ESC键为止。注意
n为数字,为1时可省略。七、修改正本(续)
命令结果——-—------------------—------—————————
ncc
对从当前字符开始的n行字符进行替换,直至键入ESC键为止。
ns
替换从当前字符开始的n个字符,直至键入
ESC键为止。
nS
对从当前行开始的n行字符,进行替换,直至键入ESC键为止。
J
将当前行和下一行连接起来。
注意
n为数字,为1时可省略。八、删除正本1.x与X命令的使用命令结果——-—--------------—------—————————
x删除当前字符。
nx删除从当前字符开始的n个字符。
X删除当前字符的前一个字符。
nX删除当前字符的前n个字符。注意
n为数字,为1时可省略。八、删除正本(续)2.d与D命令的使用
用来将指定范围内文本删除,并存入缓冲区。命令结果——-—--------------—------—————————
ndw
删除以当前字开始的n个字。
nd$删除以当前字符开始的n行字符。
ndd删除从当前行开始的n行。
D
与d$同义。
d)
删除到下一句的开始。
d}
删除到下一段的开始。
d回车删除两行。九、移动与复制正本1.m命令的使用
将指定范围的文本移动到指定位置。格式如下:<起始行号>,<结束行号>m<目标行号>例::3,14m56
:7,52m02.t命令的使用将指定范围的文本复制到指定位置。格式如下:<起始行号>,<结束行号>t<目标行号>例:1,14t607,52t$九、移动与复制正本(续)3.y与Y命令的使用
将指定范围的文本复制到缓冲区,但不删除其内容。命令结果——-—--------------—------—————————
nyw
复制从当前字符开始的n个字;
ny$复制从当前字符开始的n行字符;
Y
与y$同义;
y)复制到下一句的开始;
y}
复制到下一段的开始;
nyy复制从当前行开始的n行;
y回车复制两行;十、重复和取消操作
命令结果——-—----------------------—------—————————.重复上一次所执行的命令。
u取消最后一次所做的修改或删除。
U
取消此次到当前行来做的所有修改。
p
恢复当前缓冲区中内容。如缓冲区中内容是整行信息,则放到当前行下面的一个新行;否则 将缓冲区的内容放到光标位置右边。
P
同p操作。恢复整行信息时,放到当前行上面的一个新行;否则,放到光标位置左边。:e!
重新编辑。废弃对这次文件所做的全部修改,重新从盘中读入该文件,并开始编辑。
十一、检索和替换
命令结果——-—----------------------—------—————————
/string
从当前位置向后检索字符串string,并将光标定位在该串起始位置(向后循环检索)。?string
从当前位置向前检索字符串string,并将光标定位在该串起始位置(向前循环检索)。
//重复上一条检索命令,但方向是向后检索。??重复上一条检索命令,但方向是向前检索。
n
重复上一条检索命令,而不管其检索方向。(即检索方向不变)。
N重复上一条检索命令,但检索方向改向。:g/string检索字符串string,光标定位在第一次检索到 的string所在行的行首。十一、检索和替换(续)
1.
字符串替换命令格式1:[addr]s/s1/s2/[option]
[addr]表示检索范围,省略时表示当前行。如:“1,20”:表示从第1行到20行;“%”:表示整个文件,同“1,$”;“.,$”
:从当前行到文件尾;
s为替换命令;s1
要被替换的串;s2
为替换的串;
option:g表示全局替换;
c进行确认;
p替代结果逐行显示(Ctrl+L恢复屏幕);
省略时仅对每行第一个匹配串进行替换;2.字符串替换命令格式2:g/s1/s//s2/[option]十二、其他命令命令结果------—--—-—--------------—------————————:setnumber
显示行号。:setnonumber不显示行号。:setall
显示vi各选项的设置情况。:f
显示当前文件及工作缓冲区状况。:rfilename
将名为filename的文件内容插入到缓冲区当前行的下面。:r!cmd
执行命令cmd,并将结果插入到缓冲区当前行的下面。UNIXShell
程序设计
UNIXShell概述
Shell启动及其命令
Shell命令的集成
Shell变量
Shell的控制结构
Shell的运行环境
第一章UNIXShell概述
什么是Shell Shell的双重特性
Shell程序语言的特点
Shell的版本
Shell版本的选择
1.1什么是ShellUNIX系统层次结构图
1.1什么是Shell (续)
Shell就是UNIX提供用户的使用界面。Shell处在内核与外层应用程序之间,起着协调用户与系统的一致性、在用户与系统之间进行交互的作用,即Shell为用户提供了输入命令和参数并可得到命令执行结果的环境。1.2Shell的双重特性
命令解释程序(命令解释器)
Shell解释用户输入的命令行,提交系统内核处理,并将结果返回给用户;
Shell与UNIX命令一样都是实用程序,但有区别。一旦用户注册到系统后,Shell
就被系统装入内存,并一直运行到用户退出系统之止;而一般命令仅当被调用时,才由系统装入内存执行。
程序设计语言
Shell本身也是一种可编程的程序设计语言。1.3Shell程序语言的特点
Shell允许通过编程来完成复杂的功能处理,但其作为语言与高级语言比较具有不同的特点:
Shell是解释性的,多数高级语言是编译性的;
Shell语言与高级语言处理的对象不同;
Shell与系统有密切的关系;
Shell易编写、调试、灵活性较强,但速度低;
Shell作为命令级语言,命令组合功能很强。1.4Shell的版本
Shell有两种主要语法类型:Bourne和C,彼此不兼容,Bourne家族:shkshbashpsh
zshC家族:csh
tcsh
其中:
bash和zsh在不同程度上支持csh的语法。常用Shell在交互式使用方面的比较1.5Shell版本的选择选择Shell版本应考虑的因素:
BourneShell在任何一个UNIX系统平台上都存在,因此又成为标准Shell;
BourneShell家族有更丰富的程序语言,而CShell家族有简单的程序接口;
Shell各类变种功能越来越强大,但学习和使用也越难,因此可依据使用者编程经验来选择;
Shell编程的脚本是个人使用还是公用,即要考虑移植性问题。第二章Shell启动及其命令
Shell的启动
命令的格式命令的查询
Shell常用的命令
Shell的内部命令
2.1Shell的启动登录Shell的启动在/etc/passwd文件中指定要启动的Shell。
root:x:0:1:superuser:/:/sbin/sh
feng:x:201:starf:/home:/bin/csh命令行状态下的交互Shell启动
在系统中可能有多种版本的Shell存在,可通过相应的命令来启动,如:csh
ksh
sh2.2命令格式
UNIX系统命令的一般格式为:
command[options][arguments][filenames]
options
或
switches(常带有一个连字号“-”)
字符标志位,以此扩展命令的特性或功能;
arguments
表示命令的自变量(参数);
filenames
表示文件或目录的名字。2.3命令的查询
环境变量PATH的构成决定了寻找Shell命令和其它程序的途径,是影响Shell程序效率的主要因素之一。PATH变量设置要考虑以下几点:常用目录放在PATH变量中,使用频度高的目录排在前面;
PATH应尽可能地短,不要出现重复的目录;尽量避免查询大目录,如需设置,将其路径放在PATH路径的最后位置。 例:PATH=/bin:/usr/bin:/etc:.2.4Shell常用的命令
UNIX有丰富的Shell命令,大致划分为以下几类:目录操作与管理、文件操作与管理命令、系统管理与维护、用户管理与维护、系统状态、进程管理、通讯命令、其它命令。例:awk bc cat chmodchowncp
cron
date df diff du echo expr file findgrep init
kill ln login ls mail make man
mkdir mkfs
mountmv nohup
pg pwd ps
prpwdreadrm sed sort sync tail tee wc2.5Shell的内部命令
出于运行效率的考虑,将一些命令构造在Shell的内部。这些命令比非内部命令执行速度快。
Shell常用的内部命令有:用于结构分支及控制:
ifelseforcasewhileuntilcontinuebreak
其它:
#read
cdecho
eval exec
exit
export
readonlysetshifttest timetrapunset
umask wait
第三章Shell命令的集成
元字符(通配符)和文件名生成
管道和命令表命令组合命令替换输入输出重定向(改向)
3.1
元字符和文件名生成
UNIX元字符(通配符)的定义 *
匹配任何字符串,包括空字符串;
?匹配任何单个字符;
[…,-,!]
按照范围“-”、列表“...”或不匹配“!”等形式匹配指定的字符;
\
转意符,使元字符失去其特殊的含义。
例:[a-d,x,y]匹配字符a、b、c、d、x、y;
z*匹配以字符z开始的任何字符串;
x?y
匹配以x开始、以y结束、中间为任何 单个字 符的字符串;
[!Z]
匹配不为Z的单个字符。
3.1元字符和文件名生成(续)
元字符作为文件扩展名的使用
例:[a-f]*
匹配字符a到字符f开头的文件名;
abcd2e3.cf.dat
*z
匹配以字符z结尾的任何字符串;
win.zcore.zza-c_5z
rc?.d 匹配以rc开始、以.d结束、中间为任 何单个字符的文件名;
rc0.drc2.drcS.d
*[!o]
匹配不以o结尾的文件名;
3.2管道和命令表
管道的概念
管道:是一个命令的标准输出与另一个命令的标准输入之间的连接,不经过任何中间文件;
管道线:是由管道操作符分隔的一个命令序列,最简单的管道线是一个简单命令;
管道操作符:用符号“|”表示。 例:who|wc-l
ps-ef|grepftp
ls-l3.2管道和命令表(续1)
命令表的概念
命令表:一串管道线(命令)构成了一个命令表,最简单的命令表是一个管道线(即一个简单命令)。
管道线(命令)分隔符:分隔命令表元素,确定管道线执行的条件,含义如下:
;或换行符:表示按顺序执行管道线;
&&:表示根据条件(true),执行其后面的管道线; ||:表示根据条件(false),执行其后面的管道线; &:表示前面的管道线在后台(异步)执行。3.2管道和命令表(续2)
例1:四个管道线构成一个命令表
ls-l/bin/usr/bin who|wc-l a|b|c|d
ps
例2:与例1等价
ls-l/bin/usr/bin;who|wc-l;a|b|c|d;ps
例3:sys_account&
例4:查询指定的文件是否存在,给出相应信息
test-f$1&&echo“$1exists” test-f$1||echo“$1notexists”
3.3命令组合
命令组合有两种形式:
{命令表}由当前Shell来执行命令表。例:{cdmydoc;rmjunk;}
(命令表)当前Shell派生一个子Shell进程来执行命令表。例:(cdmydoc;rmjunk;)
3.4命令替换
用命令的执行结果来替换这个字符串本身。
注意反撇号与单引号的区别。
例1:#
now=‘date’
单引号
#
echo$now
date
#now=`date`单撇号
#
echo$now 1999年12月8日星期三19时51分56秒CST
例2:#
count=10
#count=`expr$count+1`
#echo$count
113.5输入、输出重定向使用标准改向符进行重定向(改向)
< 输入改向 <<输入改向(here文件)
>输出改向>> 追加输出改向
使用标准文件描述字进行重定向(改向)
在UNIX系统中,使用了文件描述字来定义输入、输出的标准文件,其中:0:标准输入1:标准输出2:标准错误输出3.5输入、输出重定向(续1)标准输入的改向(<、<<)
command<file
command<<EndOfMarker >
: :
>EndOfMarker例1:sort<myfile
例2:cat<<!eof >Hellow!>ok!! >!eof3.5输入、输出重定向(续2)标准输出的改向(>、>>)
command>file
command>>file
例1:date>myfile
例2:ls-l>>myfile
例3:catfile*>myfile
例4:ps-ef|grepftp>myfile3.5输入、输出重定向(续3)
标准错误输出的改向(>、>>)
command2>file
command2>>file
例1:将错误输出改向到err_file文件。
myprog2>err_file
例2:将标准输出和错误输出改向out文件。
myprog>out2>>out(两种方法等价)
myprog>out2>>&1(改向处理从左至右)
例3:错误输出被显示,标准输出改向out文件。
myprog2>&1>>out第四章Shell变量
Shell变量
用户自定义变量
位置变量环境变量预定义的特殊变量变量替换
特殊字符的引用
4.1Shell变量
Shell实际上是基于字符串的程序设计语言,也具有变量。变量的名字必须以字母或下划线开头,可以包括字母、数字和下划线。
Shell变量能够而且只能存储正文字符串,即它只有一种类型的变量——串变量。
从赋值的形式上看,则可以分成四种类型的变量或变量形式。4.2用户自定义变量
语法格式:name=string
赋值号“=”两边不允许有空白符;
nodehost="beijing.UUCP” path=/bin:/usr/bin:/etc/bin count=10
允许多个赋值操作,按从右到左的顺序进行;
#
A=$BB=abcC="OK"
#echo$A$B$C
abcabcOK
当引用一个未设置的变量时,其隐含值为空;
#
echo"$mailispathofmailbox”
ispathofmailbox4.2用户自定义变量(续1)
如果用双引号“”将值括起来,则括起来的字符串允许出现空格、制表符和换行符的特殊字符,而且允许有变量替换。
例1:#MAIL=/var/mail/fk
#
var="$MAILisapathofmailbox"
#echo$var
/var/mail/fkisapathofmailbox
例2:#
str="Thisis\nabook"
#echo$str
Thisis
abook4.2用户自定义变量(续2)
如果用单引号‘’将值括起来,则括起来的字符串允许出现空格、制表符和换行符的特殊字符,但不允许有变量替换。
例1
#
BOOK="Englishbook"
#MSG='$BOOK'
#echo$MSG
$BOOK
例2#
msg='Todayis\tSunday'
#echo$msg
TodayisSunday4.2用户自定义变量(续3)
引用变量的值时,可以用花括号{}将变量名称括起来,使变量名称与它的后续字符分隔开,如果紧跟在变量名称后面的字符是字母、数字或下划线时,必须要使用花括号。
例:#
str='Thisisastring'
#echo"${str}enttestofvariables"
Thisisastringenttestofvariables
#echo"$strenttestofvariables"
testofvariables4.3位置变量
位置变量顾名思义是与位置有关的变量,这是一种特殊的变量。命令行的Shell过程名本身被指定为位置变量$0,依次参数为$1….$9。 例:ls//bin/etc/usr/bin/dev
…
$0$1
$2$3$4
$5
…
例:#catfinduserwho|grep$1
#
finduserfke4.4环境变量
Shell执行环境由一系列环境变量组成,这些变量是由Shell维护和管理的。所有这些变量都可被用户重新设置,变量名由大写字母或数字组成。
CDPATH:执行cd命令时使用的搜索路径;
HOME:用户的home目录;
IFS:内部的域分隔符,一般为空格符、制表符或 换行符;
MAIL:指定特定文件(信箱)的路径,供邮件系统用;
PATH
:寻找命令或可执行文件的搜索路径;
PS1:
主命令提示符,默认为“$”;
PS2:从命令提示符,默认为“>”;
TERM:使用的终端类型。4.5预定义的特殊变量
在Shell中有一组特殊的变量,其变量名和变量值只有Shell本身才可以设置。
$#—记录传递给Shell的自变量个数;
例1:
#
myprogabc
则$#的值为3
例2:iftest$#-lt2 then echo“twoormoreargsrequired” exit fi
4.5预定义的特殊变量(续1)
$?—取最近一次命令执行后的退出状态(返 回码):执行成功返回码为0,执行失 败返回码为1; 例:#test-rmy_file(假设my_file文件不可读)
#echo$?
1
$$—当前Shell的进程号
;
$!—取最后一个在后台运行的(使用“&”) 进程的进程号;
4.5预定义的特殊变量(续2)
$*—匹配所有位置变量;
$*匹配$1$2$3… “$*”匹配“$1$2$3…”
$@—匹配所有位置变量;
$@匹配$1$2$3… “$@”匹配“$1”“$2”“$3”…
$-
—Shell的标志位,既在Shell启动时使用 的选项,或用set命令方式所提供的选项。
4.6变量替换变量替换表达式一览表
Shell在遇到未设置的变量时,将其值作为空串处理。而在实际应用中,对于未设置的变量,用户可以根据需要采用不同的处理方式,这可通过变量替换来实现。 变量替换提供了三种功能:
允许替换未设置变量的隐含值; 允许对未设置变量赋值;
在访问未设置变量时,提示出错信息。4.6变量的替换(续1)变量替换表达式一览表4.6变量的替换(续2)
例1:${var:-word} (假设$PARM未设置)
#echo
"ThevalueofPARMis${PARM:-undefined}"
ThevalueofPARMisundefined
#echo$PARM
[注意]
此处的“
”表示空字符 $
例2:${var:-word} (假设$PARM未设置)
#arg=${PARM:-“not
defined”}
[注意]
双引号
#echo'$arg:'$arg
$arg:notdefined
4.7特殊字符的引用
消除特殊字符的含义可用转义符、单引号和双引号。
转义符(\)的引用
消除紧跟在转义符后面的单个字符的特殊含义。 例#count=`exprcount\*10`
单引号(‘’)的引用
消除被括在单引号中的所有特殊字符的含义。 例:#echo‘$count=’$count
双引号(“”)的引用
双引号能消除被括在双引号中大部分特殊字符的含义,但不能消除$、`、"、\四个字符的其特殊含义: 例:vdate=“`date`issystemmaintenanceday!”
特殊字符串引用的例外 引用双引号、单引号和转意符都不能消除对echo命令有特殊功能的控制字串(逃逸字符)的特殊含义。这些控制字串是:
\b Backspace \c 显示后不换行 \f 在终端上屏幕的开始处显示 \n 换行 \r 回车
\t 制表符 \v 垂直制表符 \ 反斜框4.7特殊字符的引用(续)第五章Shell的控制结构条件和test命令
if结构
case结构
for结构
while结构
until结构
循环体中的其它命令5.1条件与test命令
简单条件
在高级语言中判断条件依赖于运算的结果,而Shell语言依赖条件是命令执行的“出口状态”。
Shell命令的“出口状态”($?):成功:0、true
失败:x、false(x为非0数值)例:判断指定目录是否存在,并显示相应信息。#
catcheckdir
test-d$1&&echo“$1isadictory”&&exit0 echo“$1isnotadictroy” exit15.1条件与test命令(续1)
test命令
test命令可用于对字符串、整数及文件进行各类测试。其命令格式如下:
testexpression
或[expression]
注意[]
中的空格)
expression是测试的条件,计算结果:
为真,则返回“零”出口状态,为假,否则返回“非零”出口状态。
例:判断当前上机用户人数是否多于10?
#test"`who|wc-l`"-gt
10
#echo$?5.1条件与test命令(续2)
test字符串测试表达式
expressionstring1=string2string1!=string2string-nstring-zstring满足下列条件时返回真值string1与string2相同string1与string2不相同string不为空串string不为空串string为空串5.1条件与test命令(续3)
例1:两个字符串进行比较
#
user=smith
#test"$user"=smith
#echo$? 0
例2:查找指定的文件或目录
#
catsearch
test"$1"||{echo"err:noparameter";\
exit1;}find.-name"$1"-print5.1条件与test命令(续4)
例2:带有空格的字符串比较
#
month="January"
#test"$month"=January
#echo$? 1
#test$month=January
#echo$? 0
区别:Shell在处理变量时,遇到有双引号将保留其内容,而省略双引号时,将滤去空格。5.1条件与test命令(续7)
例3:带有空格的字符串比较
#
a="testingstring"
#test"$a"="testingstring"
#echo$? 0
#test$a="testingstring" test:unknownoperatorstring
Shell处理变量$a时,将其进行变量替换,然后将结果(testingstring)传递给test,而test将string作为操作符来处理,因此出错。5.1条件与test命令(续8)
例4:带有空串(或未设置的字符串比较)
#
name=""
#test"$name"=smith
#echo$? 1
#test$name=smith test:argumentexpected
Shell处理变量"$name"时,双引号将其括起的内容作为一个“位置持有者”来保留,并把该值传递给test,保证处理的正常执行。5.1条件与test命令(续9)
例4:带有空串的字符串比较
#
blanks=""
#test$blanks
#echo$? 1
#test"$blanks"
#echo$? 0
Shell处理变量$blanks时,将空格滤去,使其变为空串传递给test;而双引号保留“位置持有者”的位置,其值为一个空格(空白符),传递给test。5.1条件与test命令(续10)
例4:带有算符的字符串比较
#
symvar="="
#test-z"$symvar" test:argumentexpected出错的原因是“=”运算符比“-z”运算符的优先级要高,因此,test命令期望在等号之后要有一个自变量。为避免上述问题的发生,可用下面命令形式替换:
#
testx"$symvar"=x
#echo$? 15.1条件与test命令(续11)
test命令可用于整数比较
首先要搞清楚整数比较的两个概念:Shell并不区分放在Shell变量中的值的类型,就变量本身而言,它存放的仅仅是一组字符串,既Shell只有一种类型的变量——串变量。
当使用整数比较操作符时,是test命令来解释存放在变量中的整数值,而不是Shell。
5.1条件与test命令(续12)
test整数测试表达式
expressionint1-eqint2int1-geint2int1-gtint2int1-leint2int1-ltint2满足下列条件时返回真值两者为数值且int1等于int2两者为数值且int1大于或等于int2两者为数值且int1大于int2两者为数值且int1小于或等于int2两者为数值且int1小于int2int1-neint2两者为数值且int1不等于int25.1条件与test命令(续13)例:
#
x1="005"
#
x2="10"
#test"$x1"=5
按串方式比较
#
echo$? 1
#test"$x1"-eq5按数值方式比较
#
echo$? 0
#test"$x2"-eq10
#echo$? 0
5.1条件与test命令(续14)
test中常用的文件测试表达式
expression-rFileName-wFileName-xFileName-sFileName-dFileName满足下列条件时返回真值FileName存在且为用户可读FileName存在且为用户可写FileName存在且为用户可执行FileName存在且其长度大于0FileName为一个目录-fFileNameFileName为一个普通文件5.1条件与test命令(续15)
例1:检查指定的文件是否存在并且可读
test-f/usr/fk/message
例2:检查指定的文件是否为目录
test-d/usr/src/local/sendmail例3:检查指定的出错文件是否为空,如不空 则列出该文件的内容。
test-s$errfile&&cat$errfile6.1条件与test命令(续16)
表达式的逻辑运算
逻辑运算符包括:
!—逻辑非单目运算符,可放置在任何其它test表达式之前,求得表达式运算结果得非值。-a
—逻辑与运算符,执行两个表达式的逻辑与运算,并且仅当两者都为真时,才返回真值。-o
—逻辑或运算符,执行两个表达式的逻辑或运算,并仅当两者之一为真时,就返回真值。6.1条件与test命令(续17)
逻辑运算符的优先级 逻辑运算符优先级(由高到低)
的排列顺序
如下:
()
!
-a
-o
逻辑运算符优先级要比字符串操作符、数字比较操作符、文件操作符的优先级低。6.1条件与test命令(续18)
表达式的逻辑组合
expression!
exprexpr1–aexpr2expr1–oexpr2\(expr\)满足下列条件时返回真值expr返回值为假(Not)expr1和expr2同时为真(And)expr1为真或expr2为真(Or)expr为真时[注意]左右括号前要加转义符\6.1条件与test命令(续19)
例1:当指定的文件不可读时为真。
test!-r/usr/fk/message例2:当指定的文件均存在,且message为可读、$mailfile指定的文件为普通文件时,返回真。
test-r/usr/fk/message-a-f
"$mailfile"例3:当变量值大于等于0并且小于10时为真。
test"$count"
-ge0-a
"$count"-lt10
例4:
test\(“$a”-eq0-o"$b"-gt5\)
-a"$c"-le86.2if结构
if的简单结构
格式ifcommand1 then command2 command3 …
fi6.2if结构(续1)
if的完整结构
格式ifcommand1 then command2 command3 …
else command4 command5 …
fi6.2if结构(续2)
if的连用结构
格式1ifcommand1 then commands
else ifcommand2 then commands
: : fi fi6.2if结构(续3)
if的连用结构
格式2ifcommand1 then commands
elifcommand2 then
commands ::
commands else commands fi6.3case结构
格式casevaluein pattern1)command11 … command1n;; pattern2)command21 … command2n;; …… patternn)commandn1 … commandnn;; esac
6.4for结构
格式 forvariableinarg1arg2…argn do command … command done6.5while结构
格式 whilecommand do command … command done6.6until结构
格式 untilcommand do command … command done6.7循环体中其它命令
break命令
break是Shell的内部命令,用于在循环体中根据命令运行的返回条件,直接终止循环体内命令的执行。 当执行break命令时,控制流从循环体中转移到done之后的第一条命令上。6.7循环体中其它命令(续1)
continue命令
continue是Shell的内部命令,用于在循环体中根据命令运行的返回条件,直接进入下一次循环命令的执行。 当执行continue命令时,控制流直接转到本循环体中第一条命令上。6.8函数的定义和使用
函数格式
FunctionName(){ command : : command } 6.8函数的定义和使用(续)
例:###
Thetestcodesforfunctiondefinition
GetYesOrNo(){ whileecho“$*(Y/N)?\c”>
&2
do
readreplyRestData case“$reply”in [yY]) return0;; [nN])return1;; *)echo“PleaseenterYorN!”>&2;;
esac done
执行#
GetYesOrNo“Doyouwishtocontinue”||exit
显示Doyouwishtocontinue(Y/N)?第七章Shell的运行环境局部变量全局变量局部变量和全局变量作用域程序调试
Shell程序的应用7.1局部变量
在某一局部特定环境下使用的变量。
注册Shell在接受到用户输入的命令(非内部命令)后,通常派生出一个子Shell,由此子Shell负责解释执行该命令。
子Shell有自己的运行环境和变量,这些变量仅在子Shell的范围内的特定环境下才能使用。
子Shell不能存取由父Shell设置的局部变量,也不能改变父Shell的变量值。7.1局部变量(续)例1:#
catvartest1 echo:$x:
#x=100
#vartest1
::
例2:#
catvartest2 x=60 echo:$x:
#x=10
#vartest2 :60:
#echo$x 107.2全局变量 全局变量是一种特殊的变量,可以被任何运行的子Shell来引用。全局变量通过export命令来定义,格式如下:
exportvariables其中variables是要变成全局变量的变量表名。
一旦变量被定义为全局变量,则对于以后的所有子Shell来说这些都是全局变量;
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025粮油销售合同范本
- 打字员的劳动合同书
- 印刷品订货合同格式
- 2025房屋商用租赁合同范本
- 2025农机社会化服务作业合同(合同版本)
- 医疗机构采购与供应合同
- 配音演员聘用合同范本
- 探索在线技能培训的新模式
- 指点迷津筑梦未来主题班会
- 技术进口合同范本
- 规范性文件备案审查意见反馈表
- 六年级上册数学书苏教版答案
- CDE网站申请人之窗栏目介绍及用户操作手册
- 车班班长工作总结5篇
- 行业会计比较(第三版)PPT完整全套教学课件
- 值机业务与行李运输实务(第3版)高职PPT完整全套教学课件
- 高考英语语法填空专项训练(含解析)
- 42式太极剑剑谱及动作说明(吴阿敏)
- 部编版语文小学五年级下册第一单元集体备课(教材解读)
- 仁爱英语九年级下册单词表(中英文)
- 危险化学品企业安全生产标准化课件
评论
0/150
提交评论