当前位置:文档之家› shell编程与文本编辑(vi)

shell编程与文本编辑(vi)

shell编程与文本编辑(vi)
shell编程与文本编辑(vi)

shell编程与文本编辑

8.1 shell编程

8.1.1 shell基础

shell是用C语言写的一个程序,它虽然与系统在一起并且作为系统的一部分提供给用户,但它不是操作系统的核心部分,它属于普通用户程序, 是命令的解释程序。

8.1.1.1 shell命令及其表示方式

在shell程序中,一个命令行是由一系列的参量(argument)组成,参量与参数之间用空格或制表符隔开。第一个参量(位臵计数为0)即是命令的名字。

命令行的一般格式为:参数0 参数1 参数2 ……

例如:cat file1 file2 file3

在这个命令行中共有四个参量,第一个参数cat是命令的名字,其余三个是文件名,其意思是打开文件file1、file2和file3。

如果命令行的第一个参量(即命令名的位臵)是一个文件,而这个文件是可执行的,那么这个可执行的文件:

A.可能是一个已经被编译过的程序,在这种情况下,直接运行这个程序即可

B.如果文件被标记为可执行的,但它不是被编译这的程序,那么就认为它是一

个shell过程。也就是说,它是一个包括了一些shell命令行的普通文本文

件。遇到这种情况,shell读这个文件,并且执行包含在文件中的一些shell

命令。

8.1.1.2 shell程序所用的命令路径

通常,shell从文件系统的三个不同的地方查找所用的命令,查找的顺序为:当前目录、目录/bin、目录/usr/bin。这样的机制,给多个用户执行的公共命令提供发一种方便的方法。

8.1.1.3 文件名匹配符

shell程序使用了三种匹配符:

(1)* 星号:匹配任何字符串,包括空字符,但不含符号“.”

例如:/u/data/*表示目录/u/data下所有的文件

/u/data/*ab表示目录/u/data下所有以ab字母结尾的文件

/u/data/*.c表示目录/u/data下所有以.c结尾的文件

(2)?问号:匹配一个任何字符或数值, 但不含符号“.”

例如:/u/data/?表示目录/u/data下只含一个字母的文件

/u/data/f?b表示目录/u/data下以f字母开头、以b字母结尾而且只含

三个字符的文件

(3)[…] :在方括号中,可以是任何字符或数值序列。

A.它可以匹配方括号中所包含的任何一个字符。

例如:[abdf]等于或a、或b、或d、或f

B。在方括号里面,由小横杠隔开的一对字符或数值,可以与这对字符或数值给

出的范围中任意字符或数值匹配。

例如:[a-d]等于abcd

[1-6]等于123456

C.在方括号里面,字符“!”表示不包含。

例如:[!A-Z]等于不含从A至Z的大写字母

注意:目录名字中不应包含下列字符中的任何一个:* ?与[ ],如果在目录中使用了这些字符,那么在按照指定字符串查找与之相匹配的名字时,可能出现无限循环。

8.1.1.4使用引号

对shell来说,引号的作用是删除特殊字符的特殊含义。Shell程序中的特殊字符有:<> * ? [ ] # $

要使这些字符失去在shell中的特殊意义,需要某些形式的引用。

引用方式有三种:

(1)单引号“′”把特殊字符括起来。

在单引号中引用的全部字符,都将失去它的特殊意义。

例1:在键盘上输入下列信息:

aaa=testing

echo `Parameter \$aaa is $aaa`

将显示结果为:Parameter $aaa is $aaa

例2:在键盘上输入下列信息

aaa=testing

echo `Parameter \$aaa is` $aaa

将显示结果为:Parameter $aaa is testing

结果表明:单引号中引用的字符$,已经失去了它的特殊意义

(2)使用双引号““”把特殊字符括起来。

在双引号中引用的全部字符,除特殊意义的字符$、$(command)、\、`、”外,其它字符都将失去它的特殊意义。

例3:在键盘上输入下列信息

aaa=testing

echo “Parameter \$aaa is $aaa”

将显示结果为:Parameter $aaa is testing

结果表明:双引号中引用的字符$,保留它的特殊意义

(3)特殊字符前使用反斜杠“\”,它的作用是删除特殊字符的特殊含义,将它变成普

通字符。

例4:在键盘上输入下列信息

aaa=testing

echo `Parameter \$aaa is` $aaa

将显示结果为:

Parameter $aaa is testing

单引号内的符号$失去了它的特殊意义。

8.1.1.5标准输入输出

对于绝大多数的shell命令来说,从终端上输入还是从文件中输入,输出到终端还是输出到文件中,都无关紧要,命令的功能不变。因此,shell命令既可以在终端上使用,也可以在管道中使用。只有极少数的几个命令与它们的输入输出方式有关(即输入输出方式不同,它们的作用也不同)。

在执行一个命令的时候,通常需打开三个文件:标准输入(standard input)、标准输出(standard output)、诊断输出(diagnostic output)。诊断输出也称标准出错输出(standard),它存放着命令执行过程中出现的出错信息。每个文件都有一个相应的数字,称为文件的描述符。按照约定:

文件文件描述符

标准输入0

标准输出 1

诊断输出 2

通常,三个文件的初始状态都与终端相连(0号描述符是键盘,1号和2号描述符是终端屏幕),在shell中,这三个文件都可以脱离初始状态,进行重新定向。1。输入重新定向符

符号< 表示输入重新定向符。通过符号< 可将命令所需要的信息从标准输入设备定向到某一个文件。

例如:mail 命令所需的信息来自于键盘,现将它定向到文件file

# mail 用户名< file

2.输出重新定向符

符号> 与>>表示输出重新定向符。在标准输出的情况下,如果原来的文件有内容,使用重新定向输出符> 后,原有内容被新的内容所替代;若使用重新定向输出符>> ,则新的内容将追加到原有内容的后面。

例如:敲入命令行:

# date > file

表示把命令date的结果输出重新定向到文件file,并将文件file内原来的内容冲掉。

上面的两种定向输出,都是假定原有文件已经存在的情况。如果定向符后面是一个新的文件名,那么Shell将建立这个文件。

例如:>abc表示建立一个长度为零,名字为abc的文件

3.错误重新定向符

符号2> 与2>>表示错误输出重新定向符。执行unix系统命令时所产生的诊断输出,通常被定向到文件描述符2。

例如:cc test.c 2>>err

在这个命令行中,cc是C语言的编译命令,test.c是C语言编写的源程序。2是标准错误输出的文件描述符。用cc命令对test.c进行编译过程中出现的错误信息,通常放在标准错误输出文件中。这个命令行,把标准错误输出文件重新定向到文件err。其结果是把错误信息附加(appends)到了err文件的尾部,在使用重新定向符时

应特别注意,文件描述符与重新定向符之间不能有空格或制表符,比如命令行:2>> 中的数字2与符号>>之间不留空格。如果两个符号之间出现了空格或制表符,文件描述符就有可能被shell视为命令的一个参量。

8.1.1.6命令行和管道线

在unix系统中,可以若干命令连用,而每个命令之间由竖线“|”(称为管道符)隔开。对于这样使用的命令序列,我们称它为管道线(pipeline)。在管道线中,一个命令的输出(命令产生的结果),正是下一个命令的输入。当然位于管道行的最后一个命令例外。

“过滤器”是在使用管道线时经常遇到的一个概念。所谓“过滤器”是指管道线中的一个命令,过滤器首先读进输入,接着以某种方式将“输入”进行变换(相当于过滤),再将变换结果输出。一个管道线通常由一系列过滤器组成。

Unix系统的过滤器有:cut tr tee pr

有关上述命令的使用,请参阅相关文档资料。

例如:

1.who | wc -1 显示系统中注册的用户数。

2.who | grep bb 显示在系统中注册,且用户名中包含字符串“bb”的用户。3.who | grep bb |sort |pr

此行使用了三个管道符。首先查出在系统中注册的用户清单;再从名单中找出名字中含有字符串“bb”的用户名;然后,把这些用户名按第一个字母顺序排列;最后,以页为单位把排列好的用户清单显示出来。由此,可以看出“过滤器”在管道中的作用。

4.{ date;who|wc -1;}>>log

这一行由三个命令组合使用。把当前日期、在系统注册的用户数附加到log文件的尾部。使用大括号时应当注意,在{的后面一定要有一个空格,而在}的前面要有一个分号“;”。

8.1.1.7命令替换

在shell中,可以把命令行中的命令由后引号(`…`)括起来。对于一个由多参量组成的命令行,shell首先执行后引号中的命令,并且用这个命令的输出(执行这个命令产生的结果),来取代整个表达(即后引号及所包含的命令),这种在一个由若干命令组成的命令行中,由命令输出结果取代这个命令本身的表达方式,称为命令转换。

例1:today=`date`后引号中的date命令的功能是,读出当前系统的时间和日期。然后,把执行date命令的结果赋给变量today。

进行命令转换时,后引号中可以是一个命令,也可以是多个命令的组合,比如管道线等。

例2:users=`who | wc –l`表示将当前系统中注册低用户数,赋给了shell变量users

例3:用户wang敲入命令行:

$ logmsg=`echo your login directory is \`pwd\``

$ echo $logmsg

回车后屏幕显示:your login directory is /usr/wang

8.1.2 shell中的变量

在shell中,变量是一个字符串值的名字。shell提供了定义变量的机制。某些变量被作为位臵参数用在命令行中;而另一些shell变量可由用户或shell给以赋值。

8.1.2.1位臵参数

位臵参数是shell变量的一种。当一个shell过程被调用时,shell将隐含地建立位臵参数。在命令行上,位臵0处是shell过程的命令名,其位臵参数为$1、$2 (9)

Shell中规定,在调用一个shell时,它的参数最多不能超过9个。如果参数多于9个,需要用shift命令进行读写操作。

8.1.2.2用户定义的变量

在shell中,用户可以自己定义变量。变量名字可以字母组成,也可以由字母和数字混合组成。如果是后者,一定要以字母开头。

赋值语句的格式为:变量名=字符串

其中:变量名是用户自己定义的变量名字

字符串作为一个值,赋给“变量名”所表示的变量。

注意:

1.在shell赋值语句中,等号的左右两侧都没有空格。

2.位臵参数不能出现在赋值语句的左侧。

3.在一个赋值语句中可以有多个赋值,其赋值的顺序是从右到左。

例如:MAIL=/usr/mail/wang

var =“echo $1 $2 $3 $4”

stars = * * * * *

asterisks = `$ stars`

ABC=$stars

第一行,把一个文件的路径赋给变量MAIL。

第二行,双引号把字符串括起来,允许右侧空格、制表符或分号。var的值是由字符串“echo”和四个位臵参数组成的字符串。

第三行,把字符串“* * * * *”赋给变量stars。

第四行,变量asterisks的值是“$ stars”,而不是“* * * * *”。

第五行,变量ABC的值是“* * * * *”。

8.1.2.3 shell定义的变量(环境变量)

shell中的变量有两类:一类是由用户设臵的变量,它们被称为shell变量。上一节的例子即是用户自己定义的shell变量,变量的名字可以任意确定,它的值也是根据需要设臵的;另一类是由shell本身设臵的变量,称之为环境变量。它的名字是固定的,它们的值不是随意设臵的。

比较可以看出,shell变量是在一个shell活动(如,shell程序运行)内部临时创建的变量,它被用来暂保存信息,当本次shell活动终止时,它就被丢弃了。Shell 变量只在shell程序内有效,对其它程序来说是不可见的。所谓环境是对程序的运行而言的,在系统上运行的每一个程序,当它们投入运行时,在内存中都分配有一个专门的区域,这人区域被称为环境。在一个程序运行时,它将继承其父进程(即调用本程序的那个程序,或者是本程序的主程序)的环境副本。这时就要作用环境变量,把配臵信息传递给子进程。

例如:HOME 表示用户注册主目录名

PATH 表示shell寻找命令的路径

PSI 用来作为屏幕提示的主字符串。

8.1.2.4 预先定义的特殊变量

在shell中,下面几个变量具有特殊意义。它们的设臵,只能由shell进行,

而不能通过用户进行重新设臵。

$#记录传送给shell的参量数,但它不把shell过程自己的名字计数在内。因此,$#可以给出所设臵的位臵参数的个数。

$?包含最后一个执行命令的返回结果。它是一个十进制数字。为零时,表示命令执行成功。

$$这个变量表示当前进程的进程号。因为对系统中现有的进程来说,进程号是唯一的。这个字符串常常被用来为临时文件产生唯一的文件名。

8.1.2.5 shell说明

1.改变目录

cd命令的功能,是把当前目录改变为这个命令变量中指定的那个目录。系统

提供的这种手段,可以直接应用到shell程序中来。

2. .profile文件

在用户每次向系统注册时,shell都要读该用户的.profile文件。系统中的每个普通用户都有自己.profile文件。超级用户在根下有一个.profile文件,通过它设臵shell程序所需的环境变量。

3.运行标志

在shell中,通过set命令设臵某些标志,可以使用户改变shell的功能。

其中标志项有:

-a 标志变量,为export命令的使用,修改或建立标记。

-e 如果shell是非交互式的,当一个命令以非零状态返回时将直接退出shell。

-f 禁止文件名产生。

-h 设臵函数命令(即把函数当作命令使用)。

-k 把全部的关键字参量放在命令的环境中。

-n 读命令,但不执行这个命令。

-x:命令执行时,这些命令和它们的参量同时显示在屏幕上。但也有些shell命令,比如用于循环体的“for”、“while”等并不显示。

-v:读输入信息时,输入行在屏幕上显示。对分析输入行的语法错误是非常有用的。

例如:# set -x

# echo this is a test

回车后,屏幕显示:

+echo this is a test

this is a test

第一行:echo命令和它的参量全部显示,行首的+号,提示用户检查是否有语句错误。

第二行echo命令执行的结果。

注意:在上述标志前使用加号“+”,表示关闭这个标志;使用减号“-”,表示设臵

这个标志。

8.1.3 运行环境和流向控制

8.1.3.1命令运行的环境变量

在shell中,所有的变量及它们的值,都可以认为是命令开始执行时建立起来的运行环境。此外,运行环境还包括这样一些变量,它们中一些是从父进程沿袭下来的变量,另一些是使用命令时,命令行上指定作为关键字参数的变量。

如果shell进程要给它的子进程传送变量,那么这个变量就必须使用export命令进行说明。export命令也叫变量输出命令。

赋值形式为:变量=值

例如:TERM=vt100;export TERM

8.1.3.2 shell过程调用和参量传递

1. shell调用

shell实际上是一种命令。我们可以按照unix系统提供命令的使用方法来使用它。因此,调用shell有两种方法:

(1)sh proc [arg]

它的含义是:请示系统调用一个新的shell来读proc,方括号中的arg是proc运行所需的选项。

例如: 一个名字叫echo2的shell过程,其文本内容为:

for word

do

echo $word$word

done

在提示符下敲入命令行:#sh echo2 abc

屏幕上将显示信息:abcabc

或sh -v proc [arg]

其中,-v是执行标志,相当于在过程proc的开始处放了一个命令行:set -v 例如上例给出的shell,在提示下符下敲入命令行:#sh -v echo2 abc

回车,屏幕显示:

for word

do

echo $word$word

done

abcabc

因此,使用了标志项-v后,它把shell过程的文本及执行这个过程所产生的结果全部显示在屏幕上。同样,还可以设臵其它标志项:-x、-e、-u与-n。

(2)proc [arg]

如果proc是一个可执行文件,并且是一个不需编译就可执行的程序,这时,调用shell的方法可以为:proc args

2.参量传给shell的过程

当一个命令行从键盘上敲入后,shell就对这个命令行进行扫描,并把形如$n 的字符序列由第n个参量取代。Shell过程的名字计数为$0。这样的计数方法,就可

以直接索引过程的名字,并且可以有9个位臵参数。多于9个位臵参数的情况,可以用shift命令来处理。

shift命令如果不带任何参量,它的功能是把位臵参量左移一位,即$1的值被移出,$2的值取代$1的值,$3的值取代$2的值,……依次类推。由此可见,左移后,原来$1的值丢掉了,它不能移到$0的位臵。如果这个命令带有参量:shift n ,此处n是一个数字,那么shift所完成的功能是:

每次把位臵参数左移n位。

例如: #file

while test $# !=0

do

echo $*

shift

done

其中

第一行: 含有字符“#”,表示注释行。

第二行: 循环命令while用于检查判断,当参数的个数$# 不为0时,继续执行循环体中的命令。

如果使用下面命令调用程序file:file a b c d e

将会显示结果:

a b c d e

b c d e

c d e

d e

e

结果表明,循环体被执行了5次。从第二次开始,每执行一次,就把$1位臵上的参量左移一位。

8.1.3.3 shell流向控制

所谓流向控制,是指shell过程中的循环、检测、设陷、退出等涉及到shell过程运行走向的一系列操作。

相关的几个问题

(1) 管道线

管道线是一个包含了一个或多个命令的序列。命令之间由管道符“|”隔开。在一个管道线中,前一个命令的标准输出都是与之相连的后一个命令的标准输入。管道线中的每个命令是独立运行的,shell一直等到最后一个命令执行完成。整个管道线的退出状态(即管道行完成时返回的状态),是管道行中最后一个进程的退出状态。

(2) 命令清单

命令清单是由一个或多个管道线构成的序列。管道线之间可以是符号“;”、“&”、“&&”、“||”。命令清单可以由“;”或“&”来结束。命令清单中如果两个管道线之间是用分号隔开的,将按管道线的前后顺序执行,也就是说,shell要等待一个管道线执行完毕才能读下一个管道线。如果两个管道线之间是由“&”隔开的,那么前一个管道行异步地在后台执行。

例如:nohup cc prog.c &

其中cc是unix操作系统上所配的c语言的编译器。prog.c是用c语言编写的源程序。由于这个命令行用“&”结束,因此在编译器对源程序prog.c进行编译过程中,用户敲入中断键或键入quit命令退出系统,既不能中断、也不会退出编译的进行。(3)nohup命令

其功能是运行一个命令,并且不受任何挂起(hangups)和退出的影响。

命令行格式:nohup command [arguments]

其中:command 代表要运行的命令的名字

arguments 表示参量。

注意:使用这个命令时,如果用户没有对输出进行重新定向,那么,它将把输出结果存放到nohup.out文件中;如果用户在当前目录下,不具有写操作权限,那么nohup命令的输出就被重新定向到$HOME/nohup.out。

(4)符号&&和||

符号& 使一些程序能在后台运行,究竟哪些程序可以在后台运行,要视情况而定。因此,“&”的使用也受到一些限制。特别是在系统负载比较重时,不宜启动过多的后台进程。

符号&&(and-if)与||(or-if)的作用是使管道线有条件地执行。它们在命令行上操作的优先级是相同的,并且低于操作符& 和| 的优先权。

||的格式为:cmd1||cmd2

其中cmd1、cmd2分别代表命令1和2。命令行的意义是,先执行命令cmd1,并对这个命令执行后的返回状态进行检测。只有在cmd1运行失败时(返回状态非零时认为运行失败,为零时表示运行成功)才执行命令cmd2。操作符||在这个命令行中的作用是进行条件判断,相当于下列语句:

if cmd1

test $? !=0

then

cmd2

fi

&&的格式:cmd1&&cmd2

其中&&的作用是进行一个与||互补的检测。其作用是:只要第一个命令cmd1

执行成功(返回状态为零),就执行第二个命令cmd2。

例如:cmd1&&cmd2&&cmd3&&…&&cmdn

在这个程序中,前一个命令执行成功,总是后一个命令执行的必要条件。

(5)小括号和大括号

一个管道行中的简单命令,可以由小括号或大括号括起来的命令清单进行替换。换名话说,命令清单由小括号或大括号括起来之后,可以用来取代管道行中的一个简单命令。被括起来的全部命令的输出构成一个流(stream),这个流作为该管道行中下一个命令的输入。

{命令1 参量…;命令2 参量…;…;…;}|命令

常用的几个语句

介绍几个与shell过程循环有关的语句。

(1) if语句

在shell中,if语句用于表示条件的结构中,最简单的使用为:

形式一:

if command-list1

then command-list2

fi

注意:

fi和if配对使用,fi总是放在这个条件语句的最后一行,表示if命令的结束。

command-list表示一个命令清单。如果命令清单1执行成功,接着执行单2 形式二:

if command-list1

then command-list2

else command-list3

fi

表示:

如果命令清单1执行成功,接着执行命令清单2,然后退出;否则转去执行命

令清单3。

形式三:

if command-list1

then command-list2

elif command-list3

then command-list4

else command-list5

fi

其意义为:

如果执行命令清单1为真,则执行命令清单2;否则,如果命令清单3为真,则执行命令清单4;全不为真时则执行命令清单5.

例如:if test -f “$1”

then pr $1

elif test -d “$1”

then (cd $1; pr *)

else echo $1 is neither a file nor a directory

fi

第一行检测位臵参数$1的值是不是一个文件名,如果是,执行第二行,显示这个文件;如果不是一个文件名,执行第三行,继续检测参数$1的值是不是一个目录名字。如果是,则执行第四行,把当前目录改为$1,并且显示这个目录下的全部文件(由命令pr *实现)。否则执行第五行,显示$1,同时指出它既不是一个文件也不是一个目录。

(2)case语句

基本结构为:

case string in

pattern1) command-list1;;

……

patternn)command-listn;;

esac

其中string :表示一个字符串

pattern:表示一个满足一定形式的字符串

command-list:表示命令清单

在case语句中,shell依次用string字符串与字符串pattern1、pattern2…pattern 进行比较,如果同其中的某一个匹配,那么就执行这个pattern字符串后面的命令清单。

case语句中,除最后一个命令清单外,每个命令清单后都用;;结束。;;的作用是跳出case语句结构,结束case语句。

注意:

A. case语句中,任何情况上只有一个pattern字符串匹配,只有一个命令清单被执行。而string字符串与pattern字符串进行比较时是按顺序进行的。所以如果在case 结构中,星号* 作为第一个pattern字符串,那么就不会再检查其它pattern字符串了,字符比较就此结束。

B.如果有多个pattern字符串与一个命令清单相联,那么这些pattern字符串应该用竖杠|隔开。

例如:case $i in

*.c) cc $i;;

*.h|*.sh) ;;

*) echo “$i of unknown type”;;

esac

在这个例子中共有三个pattern字符:

*.c 匹配后缀为.c的任何字符串。

*.h|*.sh 两个字符串之间用竖杠| 分开,这是两个字符串与一个命令相关的

情况。

* 匹配任何字符串。

(3)条件循环语句

shell中条件语句通过while和until两个命令实现。

A.while的一般格式为:

while command-list1

do

command-list2

done

在这个结构中,第一个命令清单(command-list1)通常表示一定的条件,如果为真,或说条件满足,就执行循环体中第二个命令清单(command-list2),每执行一次返回command-list1,再判断条件是否为真,直到条件为假退出。

B.until 的一般格式:

until command-list1

do

command-list2

done

这个结构与while语句结构正好相反,如果命令清单command-list1为假,则执行命令清单command-list2; 如果命令清单command-list1为真就退出循环。

(4)for语句

shell中for语句是最常用的建立循环结构的语句。有时人们希望对一级文件中的每个文件进行操作,或对几个参量中的每一个均执行一次命令。for命令结构可以提供这种需要。

for语句格式:

for variable in word-list

do

command-list

done

此处,word-list是一个字符串清单,每个字符串之间由空格隔开。命令清单command-list中的命令对word-list中的每个字符串都要执行一遍。变量variable依次从字符串清单中取出每一个字作为它的值。

例如:for file in xec cmd word

do

diff $file.c /usr/src/sh/$file.c

done

例子中xec、cmd、word分别代表当前目录下的三个C语言的源程序文件xec.c、cmd.c、word.c。for循球结构使这三个C语言的源文件与目录/usr/src/sh中文件名相同的文件分别一一进行比较。因此徨体要执行三次。

for命令结构中,可以省略“in word-list”这一部分。如果没有这一部分,将把当前一组位臵参量使用在字符串清单的位臵上,也就是用位臵参数取代字符串清单中的字符串。

例如文件TT包含下列内容:

for word

do echo $word

done

在这个结构中,变量是word,但没给出“in word-list”。给文件TT增加执行权限:chmod +x TT

敲入命令行:TT ma pa do

屏幕上将显示:

ma

pa

do

(5)循环控制语句

shell中,用于循环控制的命令是break和continue。break命令用来结束while 命令或for命令的循环,跳到下一个语句。而continue命令用来停止当前这一次循环, 重新启动下一次循环.break和continue命令仅仅在do和done之间出现时才起作用。

例如,下面是一个交互式的shell过程,名字为P1:

while true

do echo “please enter data”

read response

case “$rdponse”in

“ok”) break;;

“”)continue

esac

done

8.1.3.4 shell过程中的有关操作

1.命令分组

有两种方法可以把shell中的命令进行分组,一种是使用小括号,另一种是使用大括号。

(1) 小括号()

将使shell建立一个子shell,由这个子shell执行括号内的命令。左括号“(”和右括号“)”无论出现在命令行的什么地方,它们都能被识别出来。但是,如果括号被引号引起来,那么它们将失去本来意义,而仅仅作为一个普通字符。

把命令分组,创建子shell是很有用的。这样,在子shell这一级完成各种操作,不致于影响到当前shell(即父shell)中变量的值。还可以做到暂时改变当前目录,而在另外一个新目录下执行一些命令。在建立子shell的过程中,当前的环境(或称父shell环境)被传递给shell。

例如下面两行命令的作用相同:

DIR=`pwd`;cd /usr/otherdir;lc>temp; cd $DIR

(cd /usr/otherdir;lc>temp)

(1)大括号{}

也可以用来对命令进行分组。但使用方法和内部解释与小括号有所差别。只有当大括号的左边{和右边}作为命令的第一个字出现时,它们才能被识别。另外,使用大括号时并不建立子shell,仅仅是由shell去简单地执行大括号中的命令。

需说明:由小括号或大括号分组时,整个命令组的退出状态,是括号中最后一个命令执行后的退出状态。

2.定义函数

shell提供了定义函数的能力。函数与shell文本(scripts)或shell过程类似。函数通过shell进程执行,而不是通过一个单独的进程来执行。Shell函数的基本形式为:name() {list;}

这里,list可以包括前面介绍过的全体命令,name是函数的名字。

例如,定义一个函数,其名字为getyn:

getyn() {

while echo “$* (y/n)?\c”>&2

do

read yn

case $yn in

[yY] return 0 ;;

[nN] return 1 ;;

*) echo“Please answer y or n” >&2;;

esac

done

}

这个函数把“(y/n)?”附加到标准输出(文件描述符2)上,当输入时,可选择“Y”、“y”、“N”、“n”,所对应函数分别返回0或1。如果输入“Y”、“y”、“N”、“n”以外的任何情况,这个函数就提示用户进行正确的输入。

在shell中,用户自己定义的函数可以像其它命令一样使用,比如,可以这样使用上述getyn函数:getyn “Do you wish to continue”||exit

函数与命令的不同之处,是在函数中shell的位臵参数$1、$2…$n,设臵对应函数的自变量,而其它命令,位臵参数都是与命令行中的参量对应的。

3.圆点命令

园点“.”是shell的一个命令,它的命令格式为: .file

其中,file是文件的名字。这个命令行将使shell读并执行来自这个文件的命令,然后返回。

例如: ..profile

8.1.4 特殊的shell命令

在shell中有几个特殊的命令,也称为shell的内部命令。一般情况下,这些内部命令比unix系统命令执行得更快、更有效。

1.符号:

这是一个空命令,它不做任何事情,仅仅用来在shell过程中插入一些注释。它的退出状态是零(真)。作为注释字符,其应用的大部分情况下,可以由符号#来替代。但应注意,#可以放在一选择尾部作为注释。而“:”命令则不能。使用冒号时,注意它的后面必须留一个空格。

2. cd arg

这里的arg是一个字符串,它表示一个目录的名字。这个命令的功能是使arg成为当前目录。如果arg不是一个有效的目录,或者用户没有得以授权可以对这个目录进行存取操作,那么执行这个命令将返回一个非零的退出状态。如果使用cd命令而没有给出arg时,等于敲入命令行:cd $HOME。

3. exec arg…

这个命令中arg也是一个字符串,如果arg表示的是一个命令,那么shell执行这个命令,并不建立子shell,执行完后返回当前shell。在这个命令行中,允许使用输入和输出重新定向参量。

例如,建立一个叫bb的shell过程:

a=`date`

echo $a

exec find / -name inittab -print

在根目录下,敲入命令行:sh bb

屏幕将显示:

Sat Mar 04 19:06:38bjt 1995

/etc/inittab

4.newgrp arg…

arg是shell命令。这个命令的功能是执行newgrp命令取代shell。newgrp按次序创建新shell。应注意,通过newgrp建立的shell中,只认识环境变量。这个命令的功能相当于如下命令行:exec newgrp arg…

5.pwd 显示当前的工作目录。

6.return n

使函数在退出时其返回值由n指定。n是一个数字值。如果没有指定n,返回状态就是最后执行的那个命令的退出状态。

7.times

显示时间值。它是当前shell进程运行的累计用户时间和系统时间。例如:# times 屏幕显示:0m6s 0m15s

表示运行shell进程所用的用户时间是6秒,系统时间是15秒。

8.type name

name是命令名字。执行命令行,显示出所列命令的查找路径。

例如:type lc cp diskcp

屏幕显示:lc is hashed(/bin/lc)

cp is /bin/cp

diskcp is /usr/bin/diskcp

其中lc已由hash命令定义。

9.ulimit [-f] n

这个命令行可以对shell建立起来的文件的大小进行限定。n是一个数字,表示要限定的文件块数。选项-f是一个标志,表示对子进程建立的文件的大小进行限定在n块以内。如果没有参量-f和n,那么当前文件大小的限制块数将被显示。

例如执行命令#ulimit 屏幕上将显示:4194304

表明目前系统允许shell建立的文件最大长度不行超过4194304块。10.umask nnn

用户文件创建掩码被设臵为nnn。如果不给出nnn,当前的掩码值就被显示。在创建文件时,它被用来设臵文件默认的操作权限。

8.1.5 shell过程

8.1.4.1 建立shell过程

建立一个shell过程的步骤如下:

第一步: 建立一个普通的shell文本文件(例proc)。

第二步: 改变这个文件的操作模式,使它成为一个可执行的文件。

第三步: 按下面的形式调用该shell:

proc args

其中proc表示程序名称,args表示所需参量。

在shell过程中,有几个执行标志很有用处:

-e标志在shell过程中如果有任何一个命令在执行后,其退出状态为非零,标志-e将使shell立即退出。

-u标志shell过程中,当臵换变量的值出现错误时,这个标志将把不正确的变量值清除,因此,-u标志可用来对变量进行总检查。

-t标志当shell读并且执行完当前输入行上的命令后,这个标志将shell退出。

-n标志这是一个“不执行”标志。通常情况下,要检查一个shell过程是否有语法错误,只有运行这个过程才能发现。如果不想运行它。又能检查出语

法错误,就需要使用-n标志,方法是把命令行:set -nv 放在shell过

程的起始处即可。

-k标志它使那些具有:变量=值形式的参量被处理为关键字参数。在没有设臵这个标志时,只有出现在命令名字之前的那些参量,被处理为关键字

参理。

8.1.4.2所支持的命令和特性

1. 条件检测命令test

test命令在条件判断、循环结构中使用最为普通,它的主要功能是:以指定的表达式进行计算,如果表达式的值为真,那么test命令返回一个零作为退出状态。否则,将返回一个非零退出状态(对应于表达式值为假的情况)。这个表达式是以test 命令的参数形式出现在命令行中。如果在test命令行中没有给出参量,也将返回一个非零退出状态。

命令格式:[expression] 或test expression

使用方括号也是test命令的一种形式。

expression是命令行的参量,一个条件表达式。条件表达式由一些具有专门意义的选项组合而成.

其中:

-r file 如果文件file存在,并对用户来说是可读的,test命令返回真。

-w file 如果文件file存在,并对用户来说是可写的,test命令返回真。

-x file 如果文件file存在,并对用户来说是可执行的,test命令返回真。

-s file 如果文件file存在,并且长度大于零,test命令返回真。

-d dir 如果dir是一个目录,test命令返回真。

-f file 如果file是一个普通文件,test命令返回真。

-z str 如果字符串str的长度为零,test命令返回真。

-n str 如果字符串str的长度不为零,test命令返回真。

s1=s2 如果字符串s1和字符串s2相等,test命令返回真。

s1!=s2 如果字符串s1和字符串s2不相等,test命令返回真。

s1 如果s1不是空字符串,test返回真。

n1 -eq n2 如果整数n1与n2相等,test命令返回真。-eq表示代数的等量关系。整数n1和n2

之间还可以是其它关系:

-ne 不等-gt 大于-ge 大于或等于

-lt 小于-le 小于或等于

上面所列出的是test命令经常使用的一些选项,也是测试条件。这些选项在命令行中可以单个使用,也可以组合使用。组合作用时,选项间要由适当的操作符连接。在test命令行中,可以使用的操作符有:

! 一元求“反”操作符

-a 二元逻辑“与”操作符(and)

-o 二元逻辑“或”操作符(or),其优先级低于逻辑“与”。

(expr) 此处的expr是一字符串,使用括号的意义是分组。括号里的部分在命令行中优先运算。

2。在屏幕上显示参量

在shell中,使用echo命令可以在屏幕上把命令行中的参量args显示出来。命令行的格式:

echo [options] [args]

其中:options 是命令的选项

args 是字符串。

echo命令把这些字符串拷贝到标准输出上的时候,字符串之间有一个空格作为间隔。可以使用echo命令来为用户输入时进行某些提示;也可以使用echo命令在shell过程中发布一些诊断信息;还可以在管道线中使用echo命令。

echo还有其它一些选项:“\选项字符”的形式

\b 空一格,使显示行首为一个空格。

\c 显示行没有输出。

\f 把arg的内容放到屏幕最顶端显示,如果原来屏幕上有其它内容,首先清屏。

\n 把arg的内容放到新行上显示。

\r 回车。

\t 显示行首为一个制表符。

\v 垂直制表符。

\\ 后斜杠。

上述这些符号,既可作为命令行的选项部分,对后面内容的显示格式起到控制作用,也可以单独使用.

3. 表达式求值expr

使用expr命令可以在整型数上进行算术操作和逻辑操作,以及在它的参量上进行字符串比较等操作。expr命令把表达式计算结果写到标准输出上,它还可以用来设臵变量。

例如,建立可执行的shell文件a1:

a=2

b=3

c=`expr $a+$b`

echo $c $b $a

敲入命令行:# sh al回车,屏幕将显示:5 3 2

4. true命令和false命令

true和false命令的功能分别是使函数的退出状态为零和非零。这两个命令常用来完成无条件的循环。

例如:While true

do

echo ABC

done

将在屏幕上不间断地显示“ABC”,直到键盘接收到中断命令为止。

8.2 文件编辑器

本节简单地介绍文件编辑器vi的使用以及它的绝大部分命令。

8.2.1 vi基本操作

1.进入编辑状态

vi有两种工作方式(或称工作状态):即编辑方式和插入方式。在使用中,这两种方式经常相互转换。vi所有的命令都在编辑方式下敲入和执行;如果进入插入状态,所有从键盘输入的内容,都将成为正编辑的文件的一部分。

例如:建立一个名为test的文件,键入

# vi test

将出现:

进入了编辑方式。光标所在的行,称之为当前行;屏幕最底下的行,称之为状态行。

2. 插入文本

插入文本使用命令i。

例如:在文件test中进行插入信息

# vi test进入编辑方式,屏幕会出现上述的空文件。接着敲入命令i,进入插入方式。一旦进入插入状态,键盘输入的所有字符全部进入文件中去了,待信息全部输完后,按Esc键,退出插入方式。

若不知道目前处在什么方式下,按Esc键,如能听到终端响铃,表明当前是在命令状态。

3. 重复(repeat)执行命令

重复命令“ . ”,在vi中是一个频繁使用的命令。它的功能是重复执行刚刚执行过的命令。

例如:刚刚执行过插入命令,输入了一行内容。当该行敲完后,按回车,并按Esc 键,退出插入方式。接着敲入“ . ”,执行重复命令。这时候,屏幕显示增加了一行。这表明插入的内容原封不动地复制了一遍。重复命令可以连续使用。

在vi中,重复命令有它自己的使用范围。它仅重复最近一次使用的插入命令i,和最近一次使用的删除命令d。

4. Undo命令

这也是vi中一个很有用的命令,它是取消刚才的命令,Undo命令的这一特点,对于恢复那些使用不当的删除或插入操作是很有帮助的。

5. 移动光标

vi全屏幕编辑器,定义了几组光标移动键:

(1) 移动一个字符位臵

在屏幕上自由地移动光标,除了使用键盘上的箭头以外,下面的字符键在vi中也是移动光标的控制键:

h 左移i 右移

k 上移j 下移

注意:光标移动键仅在命令方式下使用。每按下一次光标移动键,光标在当前位臵上移动一个字

符的位臵.

(2) 三个特殊字符

在vi中,大写字符K、L和G是对光标移动有着特殊作用的三个命令。

H 不管光标原来在什么位臵,都将把光标移到屏幕的在上角。

L 不管光标原来在什么位臵,都将把交标移到屏幕最底行。

G 使光标移到文件的最后一行。

(3) 光标的字移动、行移动命令

共有四个这样的命令,它们也都是由单个字符构成:

w 向前移动一个字 b 向后移动一个字

o 移到下一行的行首$ 移到下一行的行末

(4) 翻屏命令

在文本编辑过程中快速翻屏的四个命令:

ctrl+u 向上翻1/2屏crtl+d 向下翻1/2屏

ctrl+f 向前翻一屏ctrl+b 向后翻一屏

6.删除命令

许多删除命令是和光标移动命令结合在一起使用的,最常用的有:

dd 删除当前行(不管光标在行中的什么位臵)。

dw 删除光标上的一个字。如果光标在一个字的中间,就从光标位臵开始删到字的末尾。

x 删除光标上的一个字符。

d$ 从光标位臵开始,删到行末。

D 同d$。

D0 从光标位臵删到行首。

. 重复执行刚才的删除命令。

7.字符串查找

在vi的编辑状态下,查找命令的格式:/字符串

将会在文件中寻找字符串,找到匹配的字符串后,按n 继续往后查找下一个。8.查找和替换

如果一个文件有多处需要替换,例如把文件中所有的”AAA”,全部改成“BBB”,这就需要使用面向行的命令,面向行的命令可以完成多个操作。比如,既完成字符的查找,又完成它的替换。

所有面向行的命令都是以冒号“:”作前缀,冒号的作用是作为状态行的提示符。面向行的命令跟在冒号后输入,并以回车作为结束。

使用面向行的命令,把例子中所有的“AAA”改成“BBB”。在命令方式下,敲下:

:1,$ s/AAA/BBB/g

这行命令的意思是,从文件的第一行(1)到文件末尾($),不管在什么地方(g表示全程)查到“AAA”,就用“BBB”(s/AAA/BBB/)替换。

9.退vi

一个文件经过以上所作的编辑操作后,要想保留其内容,就需要存盘。存盘后,退出编辑状态,并返回到unix 提示符状态。

敲入命令行:

:x

回车后,文件名、文件行数、字符数都显示在状态行。比如:

“test”[New file]5lines,299characters

此时,出现unix系统的提示符。

10.从其它文件追加内容

test是一个已经存在的文件,假设要建立一个新文件test1,并把test的内容加到文件test1中去。

首先,建立新文件test1;

vi test1

这是一个空文件。可以使用行编辑命令read,将test文件中的内容,插入到新文件test1中。

在命令方式下,敲入命令行:

:r test

这时,文件test的内容,已经拷贝到文件test1中去了。

11.临时退出vi

vi允许临时跳出正在编辑的文件,去执行其它的命令。比如,用date命令。显示当前的时间和日期,敲入:

:!date

将出现

Mon Feb 26 14:48:27 CST 2001

[Hit return to continue]

12.改变显示

vi还有大量的可以设臵的参数,例如:显示文件的行数。

敲入命令:

:set number

将会在屏幕的左侧显示带行号的文本。

vi可以使用的参数有几十个,这些选项非常有用,根据不同的情况,可以随意选择如何设臵这些选项。参见vi相关文档资料。

13.强行退出编辑

对一个进行过编辑的文件,如果不想存盘,用下面的命令可以取消编辑,退出vi状态。

:q!

将退出文本编辑状态。

8.2.2 编辑的进入与退出

1.编辑文件

调用编辑器有多种方法,可以使用一个文件名来调用vi,也可以使用多个文件名同时进入编辑。

(1)编辑一个文件

进入vi最常用的方法就是敲入vi命令和所要编辑的文件名:vi filename

这里filename是文件名字。如果这个文件名不存在,那么,一个新的空文件就建立了。

(2)编辑多个文件

如果有多个文件需要进行编辑,每个文件的进入、退出都要占用时间。Vi可以同时调用多个文件,对多个文件进行编辑。

vi prog* 使所有以prog开头的文件进入编辑状态。

vi *.prg 使扩展名为“prg”的所有文件进入编辑状态。

2020-Linux文版-实验3-Vi编辑器的使用及C编程-学生实验报告模板-P

实验报告 课程名称: Linux操作系统 实验名称:实验3 Vi编辑器的使用及C编程 学生姓名:孙文浩班级计算机 141 学号 学院(系):信息数理学院指导教师:庄丽华 实验时间: 2016 年 9 月 30 日实验成绩: 实验3 Vi编辑器的使用及C编程 一、实验要求 (1)掌握Vi的三种运行模式及切换方法; (2)掌握使用Vi的各种操作命令进行文本文件的编辑; (3)用Vi编写Linux下C程序,掌握gcc编译。 二、实验内容和实验步骤 1、vi编辑器的使用 【操作要求1】首先用合法用户名登陆系统,不保存直接退出。 【操作步骤】 (1)在系统提示符下,输入vi,按回车键,进入vi的界面。 (2)输入:q!不保存直接退出。 【操作要求2】新建文件f1并编辑一段文字进行保存。 【操作步骤】 (1)在系统提示符下输入vi f1,按回车键。 (2)看到vi的界面,输入i,左下角会出现“插入”。 (3)输入一段文字。 10 Basic Linux Networking and Monitoring Commands You Should Know I have listed down 10 basic Linux networking and monitoring commands which each Linux user should know. These Linux basic networking and monitoring commands like hostname, ping, ifconfig, iwconfig, netstat, nslookup, traceroute, finger, telnet, ethtool are used for viewing the IP address of the Linux server, managing Linux server network adapter configuration, making network connections among Linux servers over telnet and

实验3:文本编辑器vi

实验三:文本编辑器vi 1实验目的 通过实验掌握Linux操作系统的文本编辑器vi。 2实验设备 硬件:PC机一台 软件:Windows98/XP/2000系统,VMware Workstation6.0,Red Hat Linux 3实验内容 (1)v i,vim的使用。 (2)修改/etc/inittab文件。 4实验预习要求 仔细阅读参考书: 【1】鸟哥的Linux私房菜基础学习篇第三版,人民邮电出版社,鸟哥【2】嵌入式Linux系统开发标准教程,人民邮电出版社,华清远见嵌入式培训中心 【3】嵌入式Linux应用程序开发标准教程,人民邮电出版社,华清远见嵌入式培训中心 关于vi的部分。 5实验步骤 (1)通过vi新建文件。 (2)分别在一般模式,编辑模式和命令模式下测试vi的使用。 6实验重点:

(1)vim简介 系统管理员的重要工作就是修改与设定某些重要软件的配置文件,因此至少得要学会一种以上的命令界面文本编辑器。在所有的Linux distributions 上都会有的一套文字编辑器就是vi,而且很多软件默认的也是使用vi 为他们编辑接口。 vim 是高级版本的vi ,vim 不但可以用不同颜色显示文字内容,还能够进行诸如shell script, C program 等程序的编辑功能。 为何要学vim ●所有的Unix Like 系统都会内建vi 文本编辑器,其他的文本编辑器则不 一定会存在; ●很多软件的编辑接口都会主动调用vi (例如crontab, visudo, edquota 等 指令); ●vim 具有程序编辑的能力,可以主动的以字体颜色辨别语法的正确性, 方便程序设计; ●因为程序简单,编辑速度相当快速。 (2)vi的使用 基本上vi 共分为三种模式,分别是“一般模式”、“编辑模式”和“命令模式”。这三种模式的作用分别是: ●一般模式:以vi 打开一个文档就直接进入一般模式(这是默认的模式)。 在这个模式中,你可以使用“上下左右”键来移动光标,可以使用“删除字符”或“删除整行”来处理文档内容,也可以使用“复制、粘贴”

vi编辑器介绍

一.vi的基本概念 文本编辑器有很多,图形模式下有gedit、kwrite等编辑器,文本模式下的编辑器有vi、vim (vi的增强版本)和nano。vi和vim是Linux系统中最常用的编辑器。 vi编辑器是所有Linux系统的标准编辑器,用于编辑任何ASCII文本,对于编辑源程序尤其有用。它功能非常强大,通过使用vi编辑器,可以对文本进行创建、查找、替换、删除、复制和粘贴等操作。 vi编辑器有3种基本工作模式,分别是命令模式、插入模式和末行模式。在使用时,一般将末行模式也算入命令行模式。各模式的功能区分如下。 1.命令行模式 控制屏幕光标的移动,字符、字或行的删除,移动、复制某区域及进入插入模式,或者到末行模式。 2.插入模式 只有在插入模式下才可以做文本输入,按“ESC”键可回到命令行模式。 3.末行模式 将文件保存或退出vi编辑器,也可以设置编辑环境,如寻找字符串、列出行号等。 二.vi的基本操作 1.进入vi编辑器 在系统shell提示符下输入vi及文件名称后,就进入vi编辑画面。如果系统内还不存在该文件,就意味着要创建文件;如果系统内存在该文件,就意味着要编辑该文件。下面就是用vi编辑器创建文件的示例。 #vi filename ~ 进入vi之后,系统处于命令行模式,要切换到插入模式才能够输入文字。 2.切换至插入模式编辑文件 在命令行模式下按字母“i”就可以进入插入模式,这时候就可以开始输入文字了。 3.退出vi及保存文件 在命令行模式下,按冒号键“:”可以进入末行模式,例如:[:w filename]将文件内容以指定的文件名filename保存。 输入“wq”,存盘并退出vi。输入“q!”,不存盘强制退出vi。 下面表示vi编辑器的3种模式之间的关系。

实验三Shell和Vi编辑器

实验二Shell和Vi编辑器 一.实验目的: 1.熟悉shell的各项功能; 2.掌握Linux系统终端方式使用的编辑器vi; 3.学习vi的启动、存盘、文本输入、现有文件的打开、光标移动、复制/剪贴、查找 /替换等命令。 二.实验内容: 1.练习使用shell的各项功能; 2.熟练掌握vi编辑器的使用。 三.实验练习: 1.熟悉Shell环境,使用Shell的各种功能 1)命令补齐功能 ●用date命令查看系统当前时间,在输入da后,按tab键,让shell自动补 齐命令的后半部分。 ●用mkdir命令创建新的目录。首先输入第一个字母m,然后按tab键,由于 以m开头的命令太多,shell会提示是否显示全部的可能命令,输入n。 ●再多输入一个字母k,按tab键,让shell列出以mk开头的所有命令的列表。 ●在列表中查找mkdir命令,看看还需要多输入几个字母才能确定mkdir这个 命令,然后输入需要的字母,再按tab键,让shell补齐剩下的命令。 ●最后输入要创建的目录名,按回车键执行命令。 ●多试几个命令利用tab键补齐。 2)命令别名功能 ●输入alias命令,显示目前已经设置好的命令的别名。 ●设置别名ls为ls –l,以长格形式显示文件列表:#alias ls=‘ls -l’。 ●显示别名ls代表的命令,确认设置生效:#alias ls。 ●使用别名ls显示当前目录中的文件列表。 ●在使定义的别名不失效的情况下,使用系统的ls命令显示当前目录中的命令列表:#\ls。

●删除别名ls:#unalias ls。 ●显示别名ls,确认删除别名已经生效:#alias ls。 ●最后再用命令ls 显示当前目录中的文件列表。 ●写出定义别名cde为:cd /etc的命令()。 3)输入、输出重定向和管道 (1)输出重定向 ●用ls命令显示当前目录中的文件列表:#ls –l。 ●使用输出重定向,把ls命令在终端上显示的当前目录中的文件列表重定向到文件list 中:#ls –l > list。 ●查看文件list中的内容,注意在列表中会多出一个文件list,其长度为0。这说明shell 是首先创建了一个空文件,然后再运行ls命令:#cat list。 ●再次使用输出重定向,把ls命令在终端上显示的当前目录中的文件列表重定向到文件list中。这次使用管道符号>>进行重定向:#ls –l >> list。 ●查看文件list的内容,可以看到用>>进行重定向是把新的输出内容附加在文件的末尾,注意其中两行list文件的信息中文件大小的区别:cat list。 ●重复命令#ls –l > list。 ●再次查看文件list中的内容,和前两次的结果相比较,注意list文件大小和创建时间的区别,完成课后第一题。 (2)输入重定向 ●使用输入重定向,把上面生成的文件list用mail命令发送给自己:#mail root < list。 ●查看新邮件,看看收到的新邮件中其内容是否为list文件中的内容。 (3)管道 ●利用管道和grep命令,在上面建立的文件list中查找字符串list:#cat list | grep list。 ●利用管道和wc命令,计算文件list中的行数、单词数和字符数:#cat list | wc。 4)查看和修改Shell变量 ●用echo命令查看环境变量PATH的值:#echo $PATH。

Linux操作系统Vi文本编辑器试验报告

Vi 文本编辑器 1.实验目的 文本编辑器的原理和操作。1.了解vi文本编辑器的相关命令。了解vi 2.2.实验原理和实验设备 1.操作系统inuxL. 3.实验步骤 1.什么是vi文本编辑器? Vi是一个全屏幕文本编辑器 优点: 具有文本编辑所需的所有功能.1 适用于各种版本的Unix/Linux2.适用于各种类型的终端.3使用灵活快捷.4缺点: 界面不太好看1.按键命令太多2.2. 如何调用vi 在系统提示符后输入vi和想要编辑(或建立)的文件名(如:vi [path]filename),便可进入vi。如果只输入vi,而不带有文件名,也可以进入vi。然后先创建文件的内容,时,只需在退出命令后输入文件名即可。vi在退出进入vi之后,首先进入的就是编辑模式,进入编辑模式后vi等待编辑命令输入而不是文本输入,也就是说,这时输入的字母都将作为编辑命令来解释。.进入编辑模式后光标停在屏幕的第一行首位上(用_表示),其余各行的行首均有一个“~”符号,表示该行为空行。最后一行是状态行,显示出当前正在编辑的文件名及其状态。如果是[New File],则表示该文件是一个新建的文件。如果输入vi带有文件名后,文件已在系统中存在的话,则在屏幕上显示出该文件的内容,并且光标停在第一行的首位,在状态行显示出该文件的文件名,行数和字符数。在编辑模式下输入插入命令i、附加命令a、打开命令o、修改命令c、取代命令r或替换命令s都可以进入插入模式。在插入模式下,用户输入的任何字符都被vi当作文件内容保存起来,并将其显示在屏幕上。在文本输入过程中,若想回到命令模式,按ESC键即可。在编辑模式下,用户按“:”键即可进入命令模式,此时vi会在显示窗口的最后一行(通常也是屏幕的最后一行)显示一个“:”作为命令模式的提示符,等待用户输入命令。多数文件管理命令都是在此模式下执行的。末行命令执行完成后,vi自动回到编辑模式。如图3.1所示。若在命令模式下输入命令过程中改变了主意,可用退格键(backspace)将输入的命令全回到编辑模式。部删除之后,再按一下退格键,即可使vi3. vi 的三种基本工作模式: 。)编辑模式、插入模式和命令模式(末行模式 三种模式之间的转换示意图图3.1 vi文件的保存和退出;4. 键切换ESC要通过如果我们处于其它命令模式时,的默认模式,vim或vi模式是Command 过来。会在屏幕的最下方等待我们输入命令:号时,vi当我们按ESC键后,接着再输入:保存;:w ;filename另存为:w filename

实验2 vi编辑器的使用-2014

实验二vi编辑器的使用 班级:计本112 姓名:邵绪宝 学号:201106080226 三、实验操作 1、创建文件 1)使用vi创建一个名为vitest的文件,文件的内容自己录入。需要输入多行来学习编 辑器的常用命令 ? $ cd ? $ pwd ? $ vi vitest 2)返回命令行格式,写入并且退出文件。注意,当你输入”:”的时候,它将出现在你 输入区域的最后一行。一旦这个缓冲区是空的并且文件被关闭了,你将看到一个包 含有该文件的行数和字符数的消息。 :wq or :x or ZZ 使用键来从输入模式进入命令行模式 用以下的命令之一可以保存文件并且关闭vi,:wq 或者:x 或者ZZ 2、编辑文件 3)打开vitest,注意屏幕的底端将会显示文件名和字符数,使用, , ,键, 练习在文件中进行光标移动 ? $ vi vitest ?j down one line向下一行 ?k up one line向上一行 ?h left one character向左一格 ?l right one character向右一格 4)显示行数,并且让光标停在第四行 ? 4G or :4 and ?:set number ?:set tabstop=4 5)删除单个字符,删除整行,删除多行 x 删除光标位置的一个字符 dd 删除光标所在行 ndd 删除光标所在行开始向下的n行 6)进行文字的复制、移动、粘贴操作 yy、Y 复制光标所在的行 nyy、nY 复制从光标开始的n行

p 粘贴在光标后 P 粘贴在光标前 w 光标右移到下一个单词的开头(以非字母的符号分隔)W 同上(以空格分隔) b 光标左移到前一个单词的开头(以非字母的符号分隔) 7)对文本内容进行修改 r 替换光标位置上的1个字符 nr 替换从光标位置开始的n个字符 R 替换从光标位置开始的连续字符(进入替换模式) nR 同上,当按Esc键时,重复n遍(进入替换模式) s 替换光标位置上的1个字符(进入输入模式) S 替换光标所在的1行(进入输入模式) 8)使用:r 、:w 、:e 命令同时编辑多个文档。

linux实验报告vi编辑器的使用

一、实验目的 学习使用vi编辑器建立、编辑、显示及加工处理文本 二、实验内容 1.进入和退出vi 2.利用文本插入方式建立一个文件 3.在新建的文本文件上移动光标位置 4.对文件执行删除、复原、修改、替换等操作 三、主要的实验步骤 (1)vim简介 系统管理员的重要工作就是修改与设定某些重要软件的配置文件,因此至少得要学会一种以上的命令界面文本编辑器。在所有的Linux distributions 上都会有的一套文字编辑器就是vi,而且很多软件默认的也是使用vi 为他们编辑接口。 vim 是高级版本的vi ,vim 不但可以用不同颜色显示文字内容,还能够进行诸如shell script, C program 等程序的编辑功能。(2)vi的使用 基本上vi 共分为三种模式,分别是“一般模式”、“编辑模式”和“命令模式”。这三种模式的作用分别是: 一般模式:以vi 打开一个文档就直接进入一般模式(这是默认的模式)。在这个模式中,你可以使用“上下左右”键来移 动光标,可以使用“删除字符”或“删除整行”来处理文档内 容,也可以使用“复制、粘贴”来处理文件数据。

●编辑模式:在一般模式中可以进行删除、复制、粘贴等操作, 但是却无法编辑文件内容!要按下“i, I, o, O, a, A, r, R”等任 何一个字母后才会进入编辑模式。通常在Linux 中,按下这 些按键时,在屏幕的左下方会出现“INSERT或REPLACE” 字样,此时才可以进行编辑。而如果要回到一般模式时,则必 须要按下“Esc”这个按键即可退出编辑模式。 ●命令模式:在一般模式当中,输入: / ?三个中的任何一个按 钮,就可以将光标移动到最底下那一行。在这个模式当中,可 以提供查找数据的操作。读取、保存、大量替换字符、离开vi 、显示行号等的操作是在此模式中完成的! (3)具体的操作步骤如下 1、进入vi 2、建立一个文件,如file.c 进入插入模式,输入一个C语言程序的各行内容,故意制造几处错误,最后,将文件存盘,回到shell状态下

linux vi文本编辑器使用

linux vi文本编辑器使用 vi 简易说明 由前面一路走来,我们一直建议使用文字模式来处理Linux 的系统设定问题,因为不但可以让您比较容易了解到Linux 的运作状况,也比较容易了解整个设定的基本精神,更能『保证』您的修改可以顺利的被运作( 这里要再次的强调,不同的Linux distribution 各有其不同的附加软体,例如Red Hat 的userconf, Linuxconf, ntsysv 与setup 等等,而Caldera 则有COAS 等等,因此,如果您只会使用此种类型的软体来控制您的Linux 系统时,当接管不同的Linux distribution 时,呵呵!那可就苦恼了!) 所以,在Linux 的系统中使用文字编辑器来编辑您的Linux 参数设定档,嗯!可是一件很重要的事情呦!所以说嘛!系统管理员至少应该要熟悉一种文书处理器的! 由 Linux是什么介绍中,我们知道Linux 与Unix 系统中的参数档几乎都是ASCII 码的『纯文字』档!因此,利用简单的文字编辑软体就可以马上修改Linux 的参数档啰!然而,与Windows 不同的是,如果您用惯了Microsoft Word 或Corel Wordperfect 的话,那么除了Xwindows 里面的编辑程式(如xemacs )用起来尚可应付外,于Linux 的文字模式下,会觉得档案编辑程式都没有Windows 程式那么方便。( 注:什么是ASCII 的纯文字档案呢?说穿了,就是您开启的档案可以将内容给您看到的档案,而不是呈现乱码的档案,那就是纯文字档了!当您以Windows 的word 存一个档案时,在DOS 的情况下使用type ,嗯!完全不知到内容是什么?因为会出现很多的乱码,那并非是纯文字档,而如果以word 在存档时,选择『纯文字类型』,嗯!那就可以使用type 看到该档案的内容了!总之,纯文字档相当的容易修改就是了!) 无论如何,要管理好Linux 系统,纯文字的手工设定仍然是需要的!所以请您千万不要嫌麻烦,努力的将下文参详一下吧!以下我们以最常见到的vi 这套文书软体来介绍Linux 底下的文书编辑动作。( 注:vi 是Unix 预设的文书处理软体,当然,也是Linux 预设的文书处理软体!) 基本上vi 共分为三种模式,分别是『一般模式』、『编辑模式』与『指令列命令模式』三种! ·一般模式:以vi 处理一个档案的时后,一进入该档案就是一般模式了。在这个模式中,你可以使用『上下左右』按键来移动游标,您可以使用『删除字元』或『删除整行』来处理档案内容,也可以使用『复制、贴上』来处理您的文件资料。 ·编辑模式:在一般模式中可以处理删除、复制、贴上等等的动作,但是却无法编辑的!要等到您按下『i, I, o, O, a, A, r, R』等字母之后才会进入编辑模式。注意了!通常在Linux 中,按下上述的字母时,在画面的左下方会出现『INSERT 或REPLACE 』的字样,才可以输入任何字来输入到您的档案中!而如果要回到一般模式时,则必须要按下『Esc』这个按键即可退出编辑模式。 ·指令列命令模式:在一般模式当中,输入『: 或/ 』就可以将游标移动到最底下那一行,在这个模式当中,可以提供您『搜寻资料』的动作,而读取、存档、大量取代字元、离开vi 、显示行号等等的动作则是在此模式中达成的! 简单的说,我们可以将这三个模式想成底下的图示来表示之:

实验三 Shell和Vi编辑器

实验三Shell和Vi编辑器 一. 实验目的: 1. 熟悉shell的各项功能; 2. 掌握Linux系统终端方式使用的编辑器vi; 3. 学习vi的启动、存盘、文本输入、现有文件的打开、光标移动、复制/剪贴、查找/替换等命令。 二. 实验内容: 1. 练习使用shell的各项功能; 2. 熟练掌握vi编辑器的使用。 三. 实验练习: 1. 熟悉Shell环境,使用Shell的各种功能 1) 命令补齐功能 用date命令查看系统当前时间,在输入da后,按tab键,让shell自动补齐命令的后半部分。 用mkdir命令创建新的目录。首先输入第一个字母m,然后按tab键,由于以m开头的命令太多, shell会提示是否显示全部的可能命令,输入n。 再多输入一个字母k,按tab键,让shell列出以mk开头的所有命令的列表。 在列表中查找mkdir命令,看看还需要多输入几个字母才能确定mkdir这个命令,然后输入需要的 字母,再按tab键,让shell补齐剩下的命令。 最后输入要创建的目录名,按回车键执行命令。 多试几个命令利用tab键补齐。 2) 命令别名功能 输入alias命令,显示目前已经设置好的命令的别名。 设置别名ls为ls –l,以长格形式显示文件列表:#alias ls=‘ls -l’。 显示别名ls代表的命令,确认设置生效:#alias ls。 使用别名ls显示当前目录中的文件列表。 在使定义的别名不失效的情况下,使用系统的ls命令显示当前目录中的命令列表:#\ls。 删除别名ls:#unalias ls。 显示别名ls,确认删除别名已经生效:#alias ls。 最后再用命令ls 显示当前目录中的文件列表。 写出定义别名cde为:cd /etc的命令()。 3) 输入、输出重定向和管道 (1) 输出重定向 用ls命令显示当前目录中的文件列表:#ls –l。 使用输出重定向,把ls命令在终端上显示的当前目录中的文件列表重定向到文件list中:#ls –l > list。 查看文件list中的内容,注意在列表中会多出一个文件list,其长度为0。这说明shell是首先创建了 一个空文件,然后再运行ls命令:#cat list。 再次使用输出重定向,把ls命令在终端上显示的当前目录中的文件列表重定向到文件list中。这次 使用管道符号>>进行重定向:#ls –l >> list。 查看文件list的内容,可以看到用>>进行重定向是把新的输出内容附加在文件的末尾,注意其中两行 list文件的信息中文件大小的区别:cat list。 重复命令#ls –l > list。 再次查看文件list中的内容,和前两次的结果相比较,注意list文件大小和创建时间的区别,完成 课后第一题。 (2) 输入重定向 使用输入重定向,把上面生成的文件list用mail命令发送给自己:#mail root < list。 查看新邮件,看看收到的新邮件中其内容是否为list文件中的内容。

虚拟机中vi文本编辑器的使用方法

vi文本编辑器的使用 (于2012年5月计算所) 目录 vi文本编辑器的使用 (1) 目录 (1) 一.vi的模式 (1) 二.基本使用 (1) 1.vi 编辑器的启动与退出: (1) 2.文件操作: (2) 3.光标的移动操作(命令模式下) (2) 4.编辑操作 (2) 5.查找与替换操作(末行模式) (3) 三、编辑器的多文件操作 (3) 1.多文件操作的vi启动 (3) 2.多文件切换命令 (3) 一.vi的模式 命令模式:vi启动默认进入的模式,可进入输入模"i",或末行模式(:),除了可以完成命令的功能外,也是后两种模式的转换点 输入模式:即文本辑辑状态,最后一行显示"-- INSERT --"提示,按ESC返回到命令模式 末行模式:可完成一些复杂操作,以":"开始,执行完一个末行命令后自动返回命令模式 二.基本使用 1.vi 编辑器的启动与退出: (1).使用命令"vi"直接进入编辑环境 (2).在命令模式下输入":q!",可以强行退出编辑环境,对文件修改不进行保存

(3).以文件名作为"vi"命令的参数时,若存在此文件,则vi可对内容进行编辑,若不存在,打开以参数名命名的空文件 2.文件操作: (1)打开新文件:在末行模式下":e filename"关闭当前文件并打开新文件,":e! filename 强制关闭当前文件并打开新文件" (2)读取文件内容到当前文件:":r filename",读取的文件内容粘贴到当前文件光标所在行的下面 (3)保存文件:命令为":w [filename]",如果文件已经命名,可直接使用":w" 命令的参数,如果没有命名,第一次保存时需指定文件名作为参数 (4)另存为文件:命令为":w filename",只保存到新文件,而不更新原来文件的内容 (5)退出vi编辑器:退出格式为":q",保存并退出为":wq",强行退出为":q!" 3.光标的移动操作(命令模式下) (1)光标方向移动:"h"左、"l"右、"k"上、"j"下 (2)翻页移动:"ctrl+f"前一页、"ctrl+b"后一页、"ctrl+u"前半页、"ctrl+d"后半页 (3)行内快速跳转:"^"本行首字符、"$"本行尾字符、"w"后一单词首字母、"b"前一单词首字母、"e"后一单词尾字母;可添加数字组合使用,例如:"3w"后三个单词首字母、"4b"前4个单词首字母、"5e"后5个单词尾字母 (4)文件内行间跳转:显示行号":set nu",取消显示行号":set nonu","1G"跳转到首行,"G"跳转到末尾行,"#G"跳转到第#行 4.编辑操作 (1)进行输入模式:"i"当前光标处,"a"当前光标后,"A"当前行末,"o"当前行下插入新行,"O"当前行上插入新行,"cw"删除当前光标到所在尾部字符,"c$"删除当前光标到行尾的字符,"c^"删除当前光标(不包括)之前到行首的字符;以上记忆如有困难,可只记"i"从命令模式进入输入模式,完成编辑后"Esc"退回到命令模式 (2)输入模式的操作:上下左右方向进行光标移动,"Home/End"定位光标到行首行尾,"Page Up /Down"上下翻页,"Backspace"左侧字符的删除,"Delete"删除光标位置的字符 (3)删除操作:在命令模式下,可用以下命令完成删除操作,"x"光标处单个字符,"dd"光标所在行,"dw"当前字符到单词尾(含空格),"de"当前字符到单词尾(不含空格),"d$"当前字符到行尾,"d^"当前字符到行首,"J"合并当前行与下一

个人心得-vi编辑器的快捷使用

个人心得-vi编辑器的快捷使用

光标控制命令 命令光标移动 h或^h 向左移一个字符j或^j或^n 向下移一行 k或^p 向上移一行 l或空格向右移一个字符 G 移到文件的最后一行 nG 移到文件的第n 行 w移到下一个字的开头 W 移到下一个字的开头,忽略标点符号 b 移到前一个字的开头 B 移到前一个字的开头,忽略标点符号 L 移到屏幕的最后一行 M 移到屏幕的中间

一行 H 移到屏幕的第一行 e 移到下一个字的结尾 E 移到下一个字的结尾,忽略标点符号 (移到句子的开头)移到句子的结尾{移到段落的开头}移到下一个段落的开头 0或| 移到当前行的第一列 n| 移到当前行的第n列 ^ 移到当前行的第一个非空字符 $ 移到当前行的最后一个字符 +或return移到下一行的第一个字符

- 移到前一行的第一个非空字符 在vi中添加文本 命令插入动作 a 在光标后插入文本 A 在当前行插入文本 i 在光标前插入文本 I 在当前行前插入文本 o 在当前行的下边插入新行 O 在当前行的上边插入新行 :r file读入文件file 内容,并插在当前行后 :nr file读入文件file 内容,并插在第n行后 escape 回到命令模式

^v char 插入时忽略char的指定意义,这是为了插入特殊字符 在vi中删除文本 命令删除操作 x 删除光标处的字符,可以在x前加上需要删除的字符数目 nx 从当前光标处往后删除n个字符 X 删除光标前的字符,可以在X前加上需要删除的字符数目 nX 从当前光标处往前删除n个字符 dw 删至下一个字的开头 ndw 从当前光标处往后删除n个字 dG 删除行,直到文件结束 dd删除整行 ndd 从当前行开始往后删除 db 删除光标前面的

实验3 使用vi编辑器

实验三使用vi编辑器 一.实验目的 学习使用vi编辑器建立、编辑、显示以及加工处理文本文件。 二.实验内容 1.进入和退出vi。 2.利用文本插入方式建立一个文件。 3.在新建的文本文件上移动光标。 4.对文本文件执行删除、复原、修改、替换操作。 三.实验步骤 1.进入和退出vi <1>进入vi 在系统提示符($)下输入命令vi和想要编辑(建立)的文件名(如example),便可进入vi。 <2>退出vi 在命令方式下可有几种方法退出vi编辑器: :wq 把编辑缓冲区的内容写到你编辑的文件中,退出编辑器,回到Linux shell 下。 :ZZ 仅当作过修改时才将缓冲区内容写到文件上。 :x 与:ZZ 相同。 :q! 强行退出vi。感叹号(!)告诉vi,无条件退出,丢弃缓冲区内容。这样,先前对该文件所做的修改或输入都被抛弃。 2.新建文件 <1>在Linux提示符$之后,输入命令:vi myfile,然后按〈Enter〉键。 <2>输入插入命令i(屏幕上看不到字符i)。 <3>然后,输入以下文本行: To the only woman tht I, For mang year you have been my wife <4>发现这两行有错,进行改正:

按〈Esc〉键,从插入方式回到命令方式。 按光标上移键,使光标移到第一行。 按光标左移键,使光标移到“tht”的第二个“t”处。 输入i(这是插入命令),然后输入a。该行变成如下形式: To the only woman that I, 按光标右移键,使光标移到“I”上。 我们想在“I”之后输入一个空格和单词“love”。为此,输入附加命令“a”。结果屏幕显示为: To the only woman that aI, 这是怎麽回事儿?......原来是:我们先前使用了插入命令i,至今并未用〈Esc〉键返回命令方式。所以,输入的所有字符都作为输入文本予以显示。 <5>按〈Esc〉键,返回命令方式。 利用x命令删除错误字符。然后,进入插入方式,输入正确字符。 <6>最后输入如下所示的文本: To the only woman that I love, For many year you have been mywwife I live you wich my life and could not have picked much better. <7>将你编辑的文本文件存盘。(利用:wq 命令,或者:x 命令) <8>重新进入vi编辑程序,编辑上面的文件。(如:$ vi myfile) <9>在屏幕上见到myfile文件的内容。在屏幕底边一行显示出该文件的名称、行数和字符个数:“myfile”4 lines,130 characters 它仍然有错,需进一步修改。 <10>将光标移到第二行的year的r处。输入a命令,添加字符s。 <11>按〈Esc〉,回到命令方式。输入命令18〈Space〉(键盘输入“18”,屏幕上不会显示出来,接着再按一下空格,光标便移动了),光标移至何处? <12>利用取代命令r将mywwife改为my wife。 <13>将光标移至第三行。输入新行命令O(大写字母),屏幕上有什麽变化? (注意:输入命令时,vi应处于命令模式)

Linux强大文本编辑器Vi的使用方法详介

vi ――强大的全屏幕编辑器 Vi 简介 文本编辑大概是系统运行中最为频繁的操作了,而在Linux下有一种标准而功能极为强大的编辑器,那就是Vi(Visual Edtior)。 对于Linux的初学者来说,vi可能显得极为不友好――所有操作都要用特殊的击键或者组合键来控制,而且似乎这些命令跟要执行的操作并没有什么关系,非常难记,比起Windows 下的notepad实在是"恐怖"多了。其实这只是转移工作环境中的正常现象,如果经过大量的实践,你会发现其实vi对于键盘的利用非常合理,如果用的熟练了,vi不仅可以成为你的文本编辑利器,而且对于系统配置甚至编程都有莫大的帮助。 Vi实用操作指南 作为一个Unix系统下标准的全屏幕文本编辑器,vi可以方便的实现插入、修改、拷贝粘贴三种基本的编辑操作。但是不像其他的字处理器,vi是以指令模式作为缺省的模式运行的。 更复杂的操作可以用一系列的按键来完成。 【进入vi 与退出】 Vi 有三种模式,输入模式(Inserting Mode)、指令模式(Command Mode)以及ex模式(Ex Mode)。在输入模式下可以输入文字,而指令模式下可以执行编辑文件、存档等等指令;Ex模 式用于执行另外一些功能,如查找、替换文本、多文件的操作等等。要进入vi可以直接在Shell提示符下键入vi [文件名称],如果该文件在当前目录不存在,则vi创建之。 为了进入输入模式,有好几种方法: 新增(append) a:从光标所在位置后面开始添加内容,光标后的内容随新增字符向后移动。 A:从光标所在列最后面的地方开始添加内容。 插入(insert) i:从光标所在位置前面开始插入内容,光标后的内容随新增内容向后移动。 I: 从光标所在列的第一个非空白字符前面开始插入内容。 开始(open) o:在光标所在列下新增一列并进入输入模式。 O:在光标所在列上方新增一列并进入输入模式。 可以随时用ESC键切换到指令模式,连续按一两次就够了,这时系统会发出哔哔声以确定进入指令模式。然后再指令模式下有多种退出方法:

第4讲 文本编辑器Vim_练习题

第4讲文本编辑器Vim 练习题 1、创建目录/vi.test ,拷贝文件/etc/inittab到/vi.test目录下,使用vi编辑/vi.test/inittab文件,把其中 的第23行到29行注释(使用连续行注释命令) 2、编辑/vi.test/inittab文件,把第10行到20行之间的字符串init都替换为boot ;并且在文件末尾 导入当前编辑文件的时间 3、定义快捷键Ctrl+e可以输入兄弟连网址https://www.doczj.com/doc/846598233.html,并自动返回命令行模式 4、设置vim配置文件,使每次使用vi编辑任何文件都自动显示行号;并定义在vi中只要输入mymail 就自动转换为admin@https://www.doczj.com/doc/846598233.html, 5、编辑/vi.test/inittab文件,定位到第35行,光标跳到行尾添加“https://www.doczj.com/doc/846598233.html,”,然后复 制此行到第40行后 6、删除/vi.test/inittab文件的第1行到第20行 7、编辑/vi.test/inittab定位到屏幕下端,把光标所在处字符替换为“x”,查找字符串“NOT”,找 到后替换为“YES”,保存退出

第4讲文本编辑器Vim 练习题答案 1、创建目录/vi.test ,拷贝文件/etc/inittab到/vi.test目录下,使用vi编辑/vi.test/inittab文件,把其中 的第23行到29行注释(使用连续行注释命令) mkdir /vi.test cp /etc/inittab /vi.test vi /vi.test/inittab :23,29s/^/#/g 2、编辑/vi.test/inittab文件,把第10行到20行之间的字符串init都替换为boot ;并且在文件末尾 导入当前编辑文件的时间 :10,20s/init/boot/g :r !date 3、定义快捷键Ctrl+e可以输入兄弟连网址https://www.doczj.com/doc/846598233.html,并自动返回命令行模式 :map ^E https://www.doczj.com/doc/846598233.html, 4、设置vim配置文件,使每次使用vi编辑任何文件都自动显示行号;并定义在vi中只要输入mymail 就自动转换为admin@https://www.doczj.com/doc/846598233.html, vi ~/.vimrc set nu ab mymail admin@https://www.doczj.com/doc/846598233.html, 5、编辑/vi.test/inittab文件,定位到第35行,光标跳到行尾添加“https://www.doczj.com/doc/846598233.html,”,然后复 制此行到第40行后 :35 or G35 按A ,输入https://www.doczj.com/doc/846598233.html, ,按ESC ,yy复制,G40 ,p粘贴 6、删除/vi.test/inittab文件的第1行到第20行 :1,20d 7、编辑/vi.test/inittab定位到屏幕下端,把光标所在处字符替换为“x”,查找字符串“NOT”,找 到后替换为“YES”,保存退出 L r 输入“x” /NOT R 输入“YES” :wq or ZZ

实验报告3_vi编辑器的使用

实验报告3_v i编辑器的使 用 -标准化文件发布号:(9456-EUATWK-MWUB-WUNN-INNUL-DDQTY-KII

实验三 VI编辑器的使用 信息学院班级:学号:姓名: 一、实验目的 1.掌握vi编辑器的启动和退出方法 2. 掌握vi编辑器中录入文件内容的方法 3. 掌握vi编辑器的各种编辑命令的使用 4.比对微软公司的Word编辑软件,了解vi的优缺点 二、实验环境 安装了Linux系统的计算机一台 三、【实验重点及难点】 重点:掌握VI编辑器的使用方法。 难点:VI编辑器内部命令的使用。 四、实验过程(实验步骤、记录、数据、分析、结果) 1、启动虚拟机 2、vi编辑器的启动和退出 首先启动shell终端,如下图 在shell提示符下输入vim或vi,将启动vi编辑器 若要退出Vi在末行命令模式下输入:wq或:q!即可 (1)使用键在编辑命令模式和末行命令模式和插入模式之间进行切换进入插入模式 a追加,i插入,o当前行后插入一空行,r、s替换。 注意其他三个对应命令:A I O R S (2)复制正文 yy 复制当前行, nyy复制n行. 退出到命令模式以后:3yy (3)删除正文 x删除一个字符, dd 删除当前行,ndd 删除n行, dw 删除一个单

词。删除内容均放在缓冲区。 x: → dd: → ndd: → dw: → (4)替换正文 p 将缓冲区的内容粘贴到当前光标处。rn用字符n替换当前字符。 → (5)练习教材5.6节的导航命令。 (6)文件操作:w 写盘,:wq写盘退出,:q!不存盘退出,:w filenam写文件名。 (7)使用vi编辑生成三个100行字符,名字分别为my1,my2和my3的文本文件 (8)在vi编辑my1状态下查看当前目录,使用搜索字符串、删除和粘贴功能,使用替换命令及存盘退出、存盘不退出和不存盘退出命令。 存盘退出:wq 存盘不退出:w 不存盘退出: q! (9)把my1,my2和my3合并为一个文本文件my,并用命令wc显示其行数、

实验二、Vi文本编辑器和GCC编译器的使用

实验二、Vi文本编辑器和GCC编译器的使用 一、实验目的: 1、掌握Linux系统终端方式使用的编辑器vi; 2、学习vi的启动、存盘、文本输入、现有文件的打开、光标移动、复制/剪贴、查找/替换等命令。 3、掌握GCC编译器的使用。 二、实验内容: 1、用Vi文本编辑器对你的计算机进行网络配置。网络配置文件有: 文件1:/etc/sysconfig/network; 文件2:/etc/sysconfig/network-scripts/ifcfg-eth0; 文件3:/etc/resolv.conf; 要求:在图形界面下配置,看相应配置文件有没有被修改;修改配置文件看图形界面是否被修改。 2、将显示器配置文件(自己查),复制到//home目录下(一定要复制,对副本进行操作,否则出现异常后果自负),并重命名为i.打开i文件,设置行标,将第89行至第96行的内容复制到第116行,并将第62行至第86行的Option替换为type.并将整篇文章中的Section替换成choose.将修改后的文件另存为j.并将j复制到/usr目录下,并重命名为k. 3、在vi中编写一个abc.c程序,对程序进行编译、连接、运行。具体如下: [student@enjoy abc]$ vi abc.c main() { int i,sum=0; for(i=0;i<=100;i++) { sum=sum+i; } printf("\n1+2+3+...+99+100=%d\n",sum);}

[student@enjoy abc]$ gcc -o abc abc.c [student@enjoy abc]$ ls abc abc.c [student@enjoy abc]$ ./abc 1+2+3+...+99+100=5050 [student@enjoy abc]$ [student@enjoy abc]$ 4、从如上内容的基础上总结vi的启动、存盘、文本输入、现有文件的打开、光标移动、复制/剪贴、查找/替换等命令。 5、编写一个程序解决“鸡兔同笼”问题。 参考程序: #include main() { int h,f; int x,y; printf("请输入头数和脚数:"); scanf("%d,%d",&h,&f); x=(4*h-f)/2; y=(f-2*h)/2; printf("鸡=%d 兔子=%d",x,y); } 运行结果: 请输入头数和脚数:18,48 鸡=12 兔子=6 注:以上实验结果抓图后,做成电子文档的实验报告发送到ftp://192.168.0.22上。

史上最全Linux配置文件介绍及VI编辑器的使用方法

一、/etc 配置文件 /etc/passwd 用户数据库,其中的域给出了用户名、真实姓名、家目录、加密口令和用户的其他信息 /etc/group 类似/etc/passwd ,但说明的不是用户而是组。 /etc/inittab init 的配置文件 /etc/issue 在登录提示符前的输出信息。通常包括系统的一段短说明或欢迎信息。内容由系统管理员确定。 /etc/motd 成功登录后自动输出,内容由系统管理员确定,经常用于通告信息,如计划关时间的警告。 /etc/mtab 当前安装的文件系统列表。由scripts 初始化,并由mount 命令自动更新。需要一个当前 安装的文件系统的列表时使用,例如df 命令,当df –a 时,查看到的信息应和其一致。 /etc/shadow 在安装了影子口令软件的系统上的影子口令文件。影子口令文件将/etc/passwd 文件中的 加密口令移动到/etc/shadow 中,而后者只对root 可读。这使破译口令更困难。 /etc/login.defs login 命令的配置文件 /etc/profile , /etc/csh.login , /etc/csh.cshrc 登录或启动时Bourne 或C shells时执行的文件。这允许系统管理员为所有用户建立全局缺省环境 /etc/printcap 类似/etc/termcap ,但针对打印机。语法不同。 /etc/securetty 确认安全终端,即哪个终端允许root 登录。一般只列出虚拟控制台,这样就不可能 (至少很困难)通过modem 或网络闯入系统并得到超级用户特权。 /etc/shells 列出可信任的shell。chsh 命令允许用户在本文件指定范围内改变登录shell。提供一

相关主题
文本预览
相关文档 最新文档