收藏 分享(赏)

实验1_shell初步.doc

上传人:hwpkd79526 文档编号:7781368 上传时间:2019-05-25 格式:DOC 页数:8 大小:86KB
下载 相关 举报
实验1_shell初步.doc_第1页
第1页 / 共8页
实验1_shell初步.doc_第2页
第2页 / 共8页
实验1_shell初步.doc_第3页
第3页 / 共8页
实验1_shell初步.doc_第4页
第4页 / 共8页
实验1_shell初步.doc_第5页
第5页 / 共8页
点击查看更多>>
资源描述

1、1实验一 Shell 初步实验所属系列:linux 操作系统应用实验。实验时数(学分):2 学时。实验目的:使学生熟悉 shell 的基本操作,并使学生有机会使用 Linux 中最常用的数据处理命令。实验要求:使用通配符来进行文件名的查找。重定向标准输入、标准输出、标准错误输出。使用管道操作,将一个进程的输出作为另一个进程的输入。使用群命令和命令行续行符。在指定的目录中,对满足条件的文件名进行递归查找。了解 vi 编辑器的基本用法。在文本文件中,查找符合指定模式的文本行。将文本文件中的各行,按顺序排列。显示一个文本文件的前几行或者后几行。简介:1shell 简介当用户登录到 Linux 上后,

2、Linux 将用户置于该用户的主目录下,并运行一个称为 shell 的程序。shell 是一个命令解释程序,它提供了操作系统与用户之间的主要界面。除了解释用户从键盘上键入的命令外,shell 也可以解释存储在文件中的命令。 事实上, Linux 中的 shell 程序相当于 MS-DOS 中的 COMMAND COM 程序。在 MS-DOS 中,存储命令的文本文件称为批处理文件,扩展名为 bat。 但在 Linux 中,含有命令的文本文件称为 shell 脚本,可以具有任意的扩展名。Shell 脚本中的命令可以是 Linux 所提供的任何实用程序,也可以是专门由 shell 使用的特定控制命令

3、流,用来控制 shell 脚本中各命令的执行次序。现在的 shell 是一种功能非常强大而且非常灵活的工具,它所提供的许多功能使用户在操作系统下工作更简单。shell 实际上是一种编程语言, shell 编程广泛地用于获取经常执行的命令和过程。2shell 特殊变量在 shell 中,除了可以使用环境变量外,还可以使用专门由 shell 使用的 shell 特殊变量。与环境变量不同的是,用户只能引用 shell 特殊变量,而不能设置这些变量的值。shell 特殊变量都由美元符$后随单个字符组成。例如:$? 上一条命令的执行情况$ ? 变量用来保存上一条命令的执行情况。如果命令执行成功,则该变量

4、的值为 0,否则表示命令执行失败。$n 命令行的第 n 个参数这是一组变量,其中$1 表示执行 shell 命令时所键入的第一个参数,而$2 表示执行shell 命令时所键入的第 2 个参数,依此类推,但 n 最大只能为 9。$0 是一个特殊变量,它的内容是命令的名字。例如,如果输入如下命令:echo hello world则$ 1 的值为字符串“hello” ,而$2 的值为字符串“world” ,$ 0 的值则为命令名“echo 。如果一条命令的参数不只 9 个,则只能通过$*或$变量来查看所有参数:或者使用 shift 命令。当使用了 shift 命令后,$1 的值被丢掉,而 $2 的值

5、被送入$1,$3 的值被送入$2,依此类推,最后$9变量的值变为第 10 个参数。每使用一次 shift 命令,这种值移位操作就被执行一次。因而通过 shift命令,也能查看所有参数。2$ 当前 shell 程序的 pid$ $变量保存了当前正在运行的 shell 程序的进程标识符(pid),这在 shell 脚本中是很有用的。下面的例子用来在 shell 中查看该变量的值:$echo $ $3943shell 脚本由若干命令组成的文件称为 shell 脚本,也称为 shell 命令文件。1)建立 shell 脚本shell 脚本是一个文本文件,因此可以用来建立文本文件的方法都可以用来建立 s

6、hell 脚本。例如,可以用 vi 编辑器来建立一个 shell 脚本,也可以通过重定向标准输入和输出在命令行上直接建立shell 脚本文件。下面给出了使用 cat 命令建立 shell 脚本的一种方法:catprint_userecho User name:$LOGNAMEecho Home directory:$HOMEecho Current shell PID: $该命令只有两个命令行,分别用来显示当前用户的登录名和主目录。2)执行 shell 脚本建立了 shell 脚本文件后,我们就可以执行该脚本文件中的所有命令了。执行一个 shell 脚本文件有三种方法。(1)用子 shell

7、执行 shell 脚本文件。可以让 shell 脚本文件作为 sh 命令的参数。sh 就是 shell 的可执行程序。如果在 sh 后面没有参数,则只是运行了一个 shell 程序,且该 shell 程序成为当前 shell,而原来的 shell 则是该 shell 的父shell。如果 sh 命令后面有文件名作为参数,则 sh 首先执行该文件中的命令,然后终止自己的执行并返回到原来的 shell 下。要用子 shell 执行上述的脚本文件 print_user,可以输入如下命令:$sh print_user尽管 prim_user 文件没有执行权限,但 其中的所有命令行都将被执行,如下所示:

8、$sh print_userUser name:jameHome directory:homejameCurrent shell PID:401$echo $356 可以看出,print_user 文件的最后一条命令显示的当前 shell 的 pid 是 401,而在命令行下显示的当前 shell 的 pid 是 356,因此用 sh 命令执行 shell 脚本文件时的 shell 与命令行中的 shell 不一样。也就是说,sh 命令是用 shell 来执行 shell 脚本文件的。(2)用“ ”命令执行 shell 脚本文件。 (3)用 exec 命令执行 shell 脚本文件。参考 sh

9、ell 实验参考资料shell 是用户与内核之间的接口,shell 在(理解) 解释了用户输入的命令之后,就调用内核中的程序来执行它。所以,了解 shell 是如何解释和执行用户输入的命令,是理解 Linux 用户接口的基础。如果想知道更多的关于这些命令的格式与选项的信息,使用 man 命令。在练习中,有些很长的3命令将出现多次。使用命令行编辑功能会有助于你成功地完成本练习。实验内容:包括 RHEL server 5 在内的 Linux 系统都具有虚拟终端。虚拟终端为用户提供多个互不干扰、独立工作的工作界面,并且在不同的工作界面可用不同的用户身份登录。也就是说,虽然用户只面对一个显示器,但可以

10、切换到多个虚拟终端,好像在使用多个显示器。RHEL 5 具有 7 个虚拟终端,其中第 16 个为字符界面;第 7 个为图形化用户界面,必须启动图形化用户界面时才存在。各虚拟终端的切换方法为:从字符界面的虚拟终端到其他虚拟终端:【Alt+F1】 【Alt+F7 】从图形化用户界面到字符界面:【Ctrl+Alt+F1】【Ctrl+Alt+F6】 ,(在虚拟机中使用【Ctrl+Shift+Alt+F1】【Ctrl+Shift+Alt+F6】) 字符界面下的 Shell 命令操作,需切换到字符界面的虚拟终端上。1Shell 命令操作【操作要求 1】查看当前目录。【操作步骤】(1)启动计算机后默认会启动

11、图形化用户界面,按【Ctrl+Alt+F1】( 在虚拟机中使用【Ctrl+Shift+Alt+F1】)组合键切换到第一个虚拟终端。(2)输入一个普通用户的用户名和口令,登录系统。字符界面下输入口令时,屏幕上不会出现类似“*”的信息,提高了口令的安全性。localhost login:helenPassword:(3)输入命令“pwd” ,显示当前目录,相关操作参见如下内容。helenlocalhost $pwdhomehelen虚拟终端未登录时显示的第一行信息表示当前使用的 Linux 的发行版本是 Red Hat EnterpriseLinux server, 版本号为 5, 第二行信息显示

12、 Linux 内核版本是 , 以及本机的 CPU 型号是 。第三行信息显示本机默认的主机名 localhost。成功登录系统后,还会显示该用户账号上次登录系统的时间以及登录的终端号。【操作要求 2】用 cat 命令在用户主目录下创建一名为 f1 的文本文件,内容为:Linux is useful for us allYou can never imagine how great it is【操作步骤】(1)输入命令“cat f1”,然后依次输入上述内容。 helenlocalhost $cat f1 使用 cat 命令进行输入时,不能使用左、右、上、下方向键,只能用【Back-Space】键来

13、删除光标前一位置的字符。并且一旦按【Enter】键,该行输入的字符就不可修改。(2)上述内容输入后,按【Enter】键,让光标处于输入内容的下一行,按 【Ctrl+D 】组合键结束输入。(3)要查看文件是否生成,输入命令“ls”即可。 $ ls(4)输入命令“cat f1”,查看 f1 文件的内容。 $cat f12重定向标准输入通常来自键盘,而标准输出和标准报错则送至终端显示。但事实并不总是如此,因为我们可以将标准输入、标准输出甚至标准报错重定向到一个文件。也就是说,可以让命令从某个文件中读取参数和数据,命令的输出结果也可以送至某个文件中而不是在终端上显示出来。4当将某个文件指定为命令的标准

14、输入时,该命令必须是能从该文件读取其输入的。例如,pwd(打印工作目录 )命令就不能将一个文件名作为其标准输入,因为它的输入源是固定的。实现重定向的最简单的方法是使用改向操作符。改向操作符可以将标准输入、标准输出和标准报错改向到某个文件。当我们在 shell 中执行命令的时候,每个进程都和三个打开的文件相联系,并使用文件描述符来引用这些文件。由于文件描述符不容易记忆,shell 同时也给出了相应的文件名。下面就是这些文件描述符及它们通常所对应的文件名:文 件 文件描述符输入文件标准输入 0输出文件标准输出 1错误输出文件标准错误 2系统中实际上有 12 个文件描述符, 可以任意使用文件描述符

15、3 到 9。 但是正如上面所看到的,0、1、2 是标准输入、标准输出和标准错误。Shell 命令中常用的重定向符号共三个,如下所示: 输出重定向,将前一命令执行的结果保存到某个文件。如果这个文件不存在,则将创建此文件;如果这个文件已有内容,则将覆盖原有内容。 附加输出重定向,将前一命令执行的结果追加到某个文件。filename 把标准输出重定向到一个新文件中Command filename 把标准输出重定向到一个文件中 (追加)command1 filename 把标准输出重定向到一个文件中command filename 2&1 把标准输出和标准错误一起重定向到一个文件中command2 f

16、ilename 把标准错误重定向到一个文件中command2 filename 把标准输出重定向到一个文件中(追加)command filename 2&1 把标准输出和标准错误一起重定向到一个文件中(追加)command filename2 command 命令以 filename 文件作为标准输入,以 filename2 文件作为标准输出command &m 把标准输出重定向到文件描述符 m 中command f1” , helenlocalhost $ catf1,然后输入 Why not have a try?(2)输入上述内容后,按【Enter】键, 让光标处于输入内容的下一行, 按

17、【Ctrl+D】组合键结束输入。5(3)输入“cat f1”命令;$cat f1,查看 f1 文件的内容,会发现 f1 文件增加了一行。Linux is useful for us allYou can never imagine how great it isWhy not have a try?shell 命令中可使用重定向来改变命令的执行。此处使用 “”符号可向文件结尾处追加内容,而如果使用 “”符号则将覆盖已有的内容。【操作要求 2】统计 fl 文件的行数、单词数和字符数,并将统计结果存放在 countf1 文件。【操作步骤】(1)输入命令“wc countf1” ,屏幕上不显示任何信

18、息。(2)输入命令“cat countf1”,查看 countf1 文件的内容,其内容是 f1 文件的行数、单词数和字符数信息,即 f1 文件共有三行,19 个词和 87 个字符,相关操作参见如下内容。helenlocalhost $wc countf1helenlocalhost $cat countf13 l9 87【操作要求 3】将 f1 和 countf1 文件的合并为 f 文件。【操作步骤】(1)输入命令“cat f1 countf1f, 将两个文件合并为一个文件。(2)输入命令“cat”查看 f 文件的内容,如下所示:helenlocalhost $cat f1 countf1 f

19、helenlocalhost $cat fLinux is useful for us allYou can never imagine how great it isWhy not have a try?3 l9 87【操作要求 4】练习使用 cat 命令与重定向。(1)创建一个名为 junk 的文件。先随便输入几行内容,然后在最后一个新行的开始处,按 Ctrl+D键以返回到 shell 的$提示符。 $catjunk(2)使用 cat 命令在你刚刚创建的文件的末尾新加入几行文本。 $cat junk(3)将文件 junk 作为信件的内容,给自己发个 mail。打开 mail,阅读,然后删除

20、,最后退出mail。$cat junk | mail 用户名$mail进入 mail 程序后,它会给用户一个提示符 &,用户可以在这个提示符下输入命令来阅读、发送、编辑、存储、删除邮件。 mail 程序的命令较多,不容易记住,用户可以首先输入 help 或 ?, mail 程序将显示常用命令帮助信息。例如,键入 t 将在屏幕上阅读当前邮件,输入 n 将跳到下一个邮件,并显示出来。用户还可以使用数字键直接选择要阅读的邮件。此外,还可以用加号和头号在相邻的邮件中切换。 $t删除命令为 d,命令所用的参数是邮件的号码。如果不提供参数,mail 程序将删除最后一次显示出来的邮件。 $d有两条命令可以完

21、成该退出操作:quit(q)和 exit(x)。quit 命令首先退出已经阅读过的邮件,并将它们保存在用户起始目录中名为 mbox 的文件中(以添加方式进行),然后结束 mail 程序的运行回到Shell 界面。用 exit 命令直接退出 mail 程序,将不对系统邮箱做任何整理工作,不保存对系统邮箱做的任何改变并退出。$q6(4)在 junk 文件中查找“student”字符串,将查找结果追加至 student.out,并将错误信息追加至grep.err 文件当中。$grep “student“ junk 1student.out 2grep.err(5)在上述例中,将查询结果与错误信息一起

22、重定向到 student.out 当中。$grep “student“ junk 1student.out 2l$cat student.out3通配符Shell 命令的通配符包括*、?、 、-和!,灵活使用通配符可同时引用多个文件,方便操作。通配符用于模式匹配,如文件名匹配、路径名搜索、字符串查找等。用户可以在命令参数中包含通配符(在文件名中或字符串中)构成一个所谓的“模式串”,在执行过程中进行模式匹配。 *:匹配任意长度的任何字符。?:匹配一个字符。 :表示范围。-:通常与 配合使用,起始字符-终止字符构成范围。!:表示不在范围,通常也与 配合使用。【操作要求 1】显示bin目录中所有以

23、c 为首字母的文件和目录。【操作步骤】输入命令“ls /bin/c*”,屏幕将显示bin 目录中以 c 开头的所有文件和目录,相关操作参见如下内容。helenlocalhost $ ls bin c*bincatbinchmod bin cp bin cshbinchgrpbinchown bincpio bincut【操作要求 2】显示bin目录中所有以 c 为首字母、文件名只有三个字符的文件和目录。【操作步骤】(1)按向上方向键,Shell 命令提示符后出现上一步操作时输入的命令“ls /bin/c* ”。(2)将其修改为“Isbinc?” ,按【Enter】键,屏幕显示bin 目录中以

24、c 为首字母、文件名只有三个字符的文件和目录,相关操作参见如下内容。helen10calhost $ls /bin/c?bincat bincsh bincutShell 可以记录一定数量的已执行过的命令,当用户需要再次执行时,不用再次输入,可以直接调用。使用上、下方向键, 【PgUp】或【PgDn】键,在 Shell 命令提示符后将出现已执行过的命令。直接按 Enter 键就可以再次执行这一命令,也可以对出现的命令行进行编辑,修改为用户所需要的命令后再执行。【操作要求 3】显示bin 目录中所有的首字母为 c 或 s 或 h 的文件和目录。【操作步骤】输入命令“ls bincsh*” ,屏幕

25、显示bin 目录中首字母为 c 或 s 或 h 的文件和目录,相关操作参见如下内容。helenlocalhost $ls /bin/csh*bincat binchownbincsh binsed binsh binsttybinchgrp bincp bincut bin setfont bin sleep bin subinchmod bincpio bin hostnamebinsetserial binsortbinsynccsh*并非表示所有以 csh 开头的文件,而表示是以 c 或 s 或 h 的文件。另外为避免误解,也可以使用c ,s,h*,达到相同的效果。7【操作要求 4】显示

26、 bin目录中所有的首字母是 v、w、x、y、z 的文件和目录。【操作步骤】输入命令“ls /bin/!a-u*,屏幕显示bin 目录中首字母是 vz 的文件和目录,相关操作参见如下内容。helenlocalhost $ls /bin/!a-u*binvi binview binypdomainname binzcat【操作要求 5】重复上一步操作。【操作步骤】输入命令“!” ,自动执行上一步操作中使用过的“ls /bin/!a-u*”命令,相关操作参见如下内容。helenlocalhost $!is /bin/!a-ubinvi binview binypdomainname binzcat

27、用户不仅可利用上、下方向键来显示执行过的命令,还可以使用 history 命令查看或调用执行过的命令。history 命令可查看到已执行命令在历史记录列表中的序号,可使用“! 序号”命令调用,而“!”命令则执行最后执行过的那个命令。【操作要求 6】查看刚执行过的 5 个命令。【操作步骤】输入命令“history 5” ,显示最近执行过的 5 个命令,相关操作参见如下内容。helenlocalhost $history 54管道及 tee另一种实现重定向的方法是使用管道(|),它将一条命令的输出发送到另一条命令的输入。下一部分将详细讨论管道操作。重定向操作符提供了对同一输入执行多个操作的一种方法

28、。只要将一个命令的输出重定向到一个文件,然后再用该文件作为另一个命令的输入,就可以在 shell 中完成绝大多数你想要做的事情,而不需要通过编写程序来实现。但是,假如现在要做的事情需要一连串的多个命令来实现,且每个命令的输入都来自前一个命令的输出,使用前面介绍的重定向操作符固然可以轻易地实现这件事情,但每一步重定向操作都需要产生一个新文件,而这些文件的唯一用途就是用作另一条命令的输入。在这一连串的命令中实际想要的只是最终结果,而不是中间文件。在这种情况下,使用重定向操作符将会产生许多中间文件扰乱你的文件系统,因为决不会再去用这些文件,以后必须将它们删掉。为了避免每次重定向操作就产生一个新文件,

29、可以使用管道操作符(|)来代替重定向操作符。管道操作符将一条命令的输出定向到另一条命令的输入,而不是定向到终端或文件。【操作要求 1】进入usrbin 目录,列出所 有 不是以 c-t 开头的文件名。【操作步骤】(1)$)#cd usrbin (2) #$ls ! c-t*(3)这将是一个很长的输出。可以使用管道操作,将该命令的输出作为 more 命令的输入。即分页显示usrbin 目录中所有文件和子目录的信息。#$ls ! c-t* | more屏幕显示出此命令输出结果的第一页,屏幕的最后一行上还出现“一 More 一” “More ”字样,按【Space】键可查看下一页信息,按【Enter

30、】键可查看下一行信息。浏览过程中按 【q】键,可结束分页显示。管道符号“|”用于连接多个命令,前一命令的输出结果是后一命令的输入。8【操作要求 2】清除屏幕内容。【操作步骤】输入命令“clear ”,则屏幕内容完全被清除,命令提示符定位在屏幕左上角。【操作要求 3】使用 ls 命令,列出当前目录中的文件。记下文件的数量。(1)使用 ls 命令,列出当前目录中的文件,并把输出重定向到文件 temp 中。#$ls#$ls temp(2)使用相应的命令来计算 temp 中的单词的数量。记下这个数量与已经记下的数量相等吗?,如果不相等,为什么?先查看 temp 中的内容,而后删除它。#$wc -w t

31、emp#$cat temp#$rm temp(3)现在使用一个管道操作来计算当前目录中的文件数目。这次所得到的结果与已经记下的数量相等吗?#$ls | wc -w(4)调出刚刚执行的命令,在管道中加入 tee 命令,将列表的输出存到文件 junk2 中。得到了显示在屏幕上的文件数目了吗?查看 junk2 文件的内容,其中包含了想要的数字吗?tee 命令作用可以用字母 T 来形象地表示。它把输出的一个副本输送到标准输出,另一个副本复制到相应的文件中。如果希望在看到输出的同时,也将其存入一个文件,那么这个命令再合适不过了。它的一般形式为:tee -a files。其中,-a 表示追加到文件末尾。#$ls | wc w | tee junk2#$cat junk2【操作要求 4】仅显示etc 目录中前 5 个文件和子目录。【操作步骤】输入命令“lsetc |head -n 5”,屏幕显示出“ls /etc”命令输出结果的前面 5 行,相关操作参如下内容。helenlocalhost $ ls /etc | head -n 5a2pscfga2ps-site cfgacpiadjtimealiases

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

当前位置:首页 > 企业管理 > 管理学资料

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报