《shell脚本教程详细讲解ppt课件》由会员分享,可在线阅读,更多相关《shell脚本教程详细讲解ppt课件(80页珍藏版)》请在金锄头文库上搜索。
1、 SHELL脚本编程1shell脚本能提高用户操作和管理员进行系统管理的效率,一般步骤1.编辑器编写脚本程序2.shell做解释程序,非交互地执行脚本,两种执行方式:1.用sh命令执行脚本文件2.给脚本文件添加执行权限,用./命令执行2HELLO WORLD!1.vi hello.shn按i进入插入模式n输入echo “hello world!”n:输入wq保存退出2.sh hello.sh或者chmod 755 hello.sh./hello.sh3一、VI编辑器1.VI的三种工作模式2.VI的启动3.VI的退出4.VI的文本编辑5.VI命令模式下的操作6.VI行命令模式下的操作 VI 编辑
2、器的使用编辑器的使用4系统配置文件、shell脚本文件等都是文本文件,编辑它们都要使用文本编辑器。在Linux系统中有多种文本编辑器,其中既有字符界面如的VI、EMACAS等,也有图形界面的如“附件”菜单下的“文本编辑器(gedit)”等,用户可以根据自己的喜好选择使用。学习vi的方法:vi的命令太多且难以记忆,而实际上真正经常使用的命令并不是太多,只要掌握几个关键的并加以适当练习很快就上手使用vi。5为什么选择VI就使用的方便性而言,有比vi更好的编辑器,还要图形化的edit,为什么还要用vi?历史久远,功能强大,在有些情况下系统中能够找到的编辑器只有vi;用户一旦熟悉后,使用非常方便;系统
3、管理员使用正则表达式可以极大地提高工作效率,而学习vi也是掌握正则表达式的有效途径。由于vi的版本不同,其命令格式、功能和用法会有一些差别。Shell中执行vi命令,RedHat系统实际上是执行vim,它是传统vi的增强版本61、VI的三种工作模式命令模式启动VI默认进入命令模式。此时界面不能编辑,只能接受命令(键入的命令看不到)文件的保存,退出,文本的删除、复制、搜索等操作输入模式编辑模式 命令模式下用i(sert),a(ppend),o,s等均可进入该模式。按esc返回命令模式行编辑模式实际上也是命令模式的一种,在命令模式下输入冒号进入一个命令行,可显示地输入命令(所以也有些书认为是两种工
4、作模式)。三种模式可自由切换,一般切换命令就是操作的英文单词的首字母72、VI的启动启动命令:vi my.txt如果文件存在,则vi显示文件内容并等待用户的命令。如果指定的文件不存在,则vi将告知用户这是未命名的文件,并进入一个空白的界面。启动vi时都是默认处于命令模式。用户必须使用命令切换到文本输入模式才能进行输入编辑,或者可执行删除、复制等编辑命令。vi vi R file_nameR file_name,以只,以只读方式打方式打开开文件文件83、VI的退出冒号进命令行模式下::q! 不存档强制退出。:w 保存但不退出,w(rite)后可加所要存档的文档名。:wq 存档后退出。命令模式下按
5、zz,功能与 :wq 相同。:x 与:wq相同命令模式:ZZ、ZQ保存/不保存退出94、怎么编辑必须从命令模式转入插入模式才能进行输入编辑,可用命令有:新增 (append)a :从光标所在位置后面开始新增资料A: 从光标所在行最后面的地方开始新增资料。插入 (insert)i: 从光标所在位置前面开始插入资料I :从光标所在行的第一个非空白字元前面开始插入资料。开始 (open)o :在光标所在行下新增一列并进入输入模式。O: 在光标所在行上方新增一列并进入输入模式。冒号进入行命令模式,输入冒号进入行命令模式,输入set nu可设置可设置vi显示行号显示行号105、命令模式下的操作:删除与修
6、改x: 删除光标所在字符dw删除一个单词dd :删除光标所在的行s:删除光标所在字节,并进入输入模式#表示数字#x删除几个字符,如3x#dw删除几个单词,如3dw表示删除三个单词#dd删除多个行,如3dd表示删除光标行及光标的下两行d$删除光标到行尾的内容d d光标键:光标键:左:删除光标前面的字符;左:删除光标前面的字符;右:删除光标所在的字符;右:删除光标所在的字符;上:将当前行与上一行删除;上:将当前行与上一行删除;下:当前行与下一行删除下:当前行与下一行删除ndnd上下光标键上下光标键: :删除当前行之上、下的几行文删除当前行之上、下的几行文本(包括当前行)本(包括当前行)u:恢复刚才
7、被修改的文本恢复刚才被修改的文本 U:恢复光标所在行的所有修改:恢复光标所在行的所有修改.:重复上一次命令的操作重复上一次命令的操作11命令模式下的操作:文本复制、粘贴复制命令:yyy: 复制整行yw:复制光标所在的单词nyw:复制包括光标所在的n个单词nyy:复制包括当前行在内的n行粘贴命令P光标移动h、j、k、lnG:移动到底n行行首126、行命令模式下的操作:字符串的查找、替换:/string搜索指定的字符串。按键n:继续进行搜索 如果写的是斜杠(/):按n会从当前位置向后查找;如果写的是问号(?),按n键则从当前位置向前查找查找且替换:%s/SEARCH/REPLACE把文档中所有SE
8、ARCH替换成REPLACE;:#,#s/SEARCH/REPLACE/g号表示数字,表示从多少行到多少行,把SEARCH替换成REPLACE;:s/SEARCH/REPLACE/g把当前光标所在行中的SEARCH单词,替换成REPLACE,并把所有SEARCH高亮显示137、设置vi 全局的配置文件位于/etc/vim/vimrc(或者/etc/vimrc) 也可以拥有自己独立的配置文件,配置文件位“/.vimrc”,如果没有该文件,也可以直接用如下命令创建并编辑比如:set nu 显示行号set ruler 显示光标位置set undolevel 显示光标位置set smartindent
9、 智能缩进syntax on(或syn on) 语法高亮14三种模式间的转换关系文本输入状态文本输入状态命令状态命令状态行编辑状态行编辑状态按按ESC键键按按A,I,S,C,O等命令等命令按按“:”键键执执行行非非退退出出命命令,如令,如w15案例练习1. 请在 /tmp 这个目录下建立一个名为 vitest 的目录; 2. 进入 vitest 这个目录当中; 3. 将 /etc/man.config 拷贝到本目录底下4. 使用 vi 开启本目录下的 man.config 这个档案; 5. 在 vi 中设定一下行号; 6. 移动到第 58 行,向右移动 40 个字符,请问您看到的双引号内是什么
10、目录? 7. 移动到第一行,并且向下搜寻一下“bzip2”这个字符串,请问他在第几行? 8. 接着下来,我要将 50 到 100 行之间的 man 改为 MAN,并且一个一个挑选是否需要修改,如何下达指令? 9. 修改完之后,突然反悔了,要全部复原,有哪些方法? 10. 我要复制 51 到 60 行这十行的内容,并且贴到最后一行之后; 11. 删除 11 到 30 行之间的 20 行; 12. 将这个文件另存成一个 man.test.config 的文件; 13. 到第 29 行,并且删除 15 个字符; 14. 储存后离开161. mkdir /tmp/vitest2. cd /tmp/vi
11、test 3. cp /etc/man.config . 4. vi man.config 5. :set nu 6. 先按下 58G 再按下 40 会看到 /dir/bin/foo 这个字样在双引号内; 7. 先执行 1G 或 gg 后,直接输入 /bzip28. 直接执行 :50,100s/man/MAN/gc 即可9. (1)简单的方法可以一直按 u 恢复到原始状态,(2)使用不储存离开 :q! 之后,再重新读取一次该文件; 10. 51G 然后再 10yy 之后按下 G 到最后一行,再p粘贴10行 11. 11G 之后,再给他 20dd即可删除 20 行了; 12. :w man.te
12、st.config 13. 29G 之后,再给他 15x 即可删除 15 个字符; 14. :wq!17二、SHELL变量与语法1.Shell概述2.shell变量和符号3.shell控制流程语法4.shell中的输出重定向5.脚本实例 SHELL变量与语法变量与语法18一、Shell概述1、shell的基本元素(1) #!/bin/bash 必须的,指出shell的类型(2)# 注释(3)变量(4)控制一个一个shell脚本脚本vi clearup.sh#!/bin/bash# this is clearcd /var/logcat /dev/null/var/log/messages /d
13、ev/null Linux中的无限大的垃圾回收站中的无限大的垃圾回收站echo Logs cleaned up.192、一般步骤:(1)编辑文件(2)保存文件(3)将文件赋予可执行的权限(4)运行及排错20注意:1.一般以.sh为文件后缀。没有也能执行。2.常见的两种执行方式./文件名 在当前目录下写明路径执行,要求文件必须有执行权限,如chmod 755 run.sh./run.shsh 文件名sh run.sh3.文件开头指定一个或多个解释脚本程序的shell,如#!/bin/bash如果指定,注意/bin不要漏了“/”,否则用./方式执行会找不到路径。不指定的话一般默认以/bin/sh执
14、行shell脚本213、Shell的一般结构的一般结构 shell 类型类型 函数函数 主过程主过程一般模板一般模板 abc.sh#!/bin/bash shell类型类型#a simple shell script example#a functionfunciton sayhello() 函数函数echo Enter Your name:read name 读取来自键盘输入的变量读取来自键盘输入的变量echo Hello $nameecho programme starts here. 主过程主过程sayhelloecho programme ends.22二、Shell中的特殊符号1、注
15、释符#除了#!/bin/bash里的#特殊2、美元符 $变量符。与反斜杠转义符相反,使其后的普通字符作为变量名,如$a表示变量a的值。变量字符长度超过1个时,用括起来3、单引号被引起的字符全部做普通字符,即全部原样echo my $SHELL234、双引号引号内的内容,除$、转义符、倒引号这三个保留特殊功能,其他字符均做普通字符。5、倒引号(数字1键旁边的那个键)引号内的字符串当做shell命令行解释执行,得到的结果取代整个倒引号括起来的部分。pwd即即pwd命令的执行结果命令的执行结果$LOGNAME系统变量系统变量24练习一下:区别下面几句echo my home is $HOMEecho
16、 “my home is $HOME”echo my home is $HOMEecho “my home is pwd”echo my home is pwd 用于括起来用于括起来shell命令命令 用于原样显示用于原样显示256. 反斜线 反斜线是转义字符,它能把特殊字符变成普通字符。在某个字符前面利用反斜杠()能够阻止shell把后面的字符解释为特殊字符。例4:yuqunyuqun $echo “Filename is N0$*”Filename is N0$* 注意:在单引号括起来的字符串中,反斜线也成为普通字符,而失去转义字符功能。26三、变量shell 变量 可以保存如路径名、文件
17、名或者一个数字本地变量 局部变量只在创建它们的Shell中使用,可以在shell程序内任意使用和修改它们。环境变量 可以在创建它们的Shell及其派生出来的任意子程序中使用。有些变量是用户创建的,其他的则是专用的(比如PATH、HOME)。是系统环境的一部分,不必去定义它们,可以在shell程序中使用它们 。还能在shell中加以修改。内部变量 由系统提供的。与环境变量不同,但用户不能修改它们。27本地变量和环境变量的对比本地变量和环境变量的对比281、本地变量(局部变量、用户变量)u本地变量本地变量 在用户现在的在用户现在的shell生命期的脚本中使用生命期的脚本中使用u 变量名变量名=值值
18、注意:注意: (1)等号两边不可以有空格)等号两边不可以有空格 (2)取值包含空格,必须用双引号括起来)取值包含空格,必须用双引号括起来 (3)Shell变量可以用大小写字母,区分大小写变量可以用大小写字母,区分大小写29u变量的声明和使用(1)变量是弱类型的(不用声明类型)(2)变量声明及赋值格式 变量=值(等号两边不能有空格)(3)变量的引用 $变量名 $变量名 变量名为1个字符时建议使用方式一,多余一个字符时建议使用方式二 举例: $a $abc 30u显示变量 echo命令可以显示单个变量取值,变量名前加$echo $Nameecho $nameecho $nameareecho $n
19、ame are输出引用变量时加输出引用变量时加比较好比较好31u清除变量 unset 变量名举例:echo $name unset name (注意:name前没有$)显示本地所有变量 set32u设置只读变量 设置变量时,不想再改变其值,可以将之设为只读变量设置变量时,不想再改变其值,可以将之设为只读变量 变量名变量名=值值 readonly 变量名变量名332、环境变量环境变量用于所有用户进程(通常称为子进程)。登陆进程称环境变量用于所有用户进程(通常称为子进程)。登陆进程称为父进程,通过为父进程,通过pstree可以查看可以查看u环境变量可以用于所有子程序,着包括编辑器、脚本和应用环境变
20、量可以用于所有子程序,着包括编辑器、脚本和应用 举例:举例:vi a.sh #!/bin/bash # 检测环境变量检测环境变量 echo 家目录是家目录是 $HOMEu 环境变量可以在命令行中设置,但用户注销时这些值将丢失环境变量可以在命令行中设置,但用户注销时这些值将丢失u 环境变量均为大写环境变量均为大写u 必须用必须用export命令导出命令导出34设置环境变量 variable-name=value export variable-name(环境变量名大写)显示环境变量 env 可以看到所有的环境变量 echo $环境变量名 (显示一个变量)清除环境变量 unset 环境变量名35u
21、HOME HOME : 代表使用者的家目录。代表使用者的家目录。cd cd 去到使用者的家目录去到使用者的家目录 或者利用或者利用 cd cd 就可以直接回到使用者家目录了。就可以直接回到使用者家目录了。uPS1PS1:shellshell的主提示符的主提示符u SHELL SHELL : 目前这个环境使用的目前这个环境使用的 SHELL SHELL 是哪个程序?是哪个程序? 如果是如果是 bash bash 的话,的话,预设是预设是 /bin/bash/bin/bashuPWDPWD:用户当前工作目录的路径。它指出用户目前在:用户当前工作目录的路径。它指出用户目前在LinuxLinux文件系
22、统中处在文件系统中处在什么位置。它是由什么位置。它是由LinuxLinux自动设置的自动设置的u HISTSIZE HISTSIZE : 这个与这个与“历史命令历史命令”有关,曾经下达过的指令可以被系统有关,曾经下达过的指令可以被系统记录下来,而记录的记录下来,而记录的“数目数目”则是由这个值来设定的。则是由这个值来设定的。 u ENV ENV : 这个使用者所使用的个性化环境设置文件的读取文件。这个使用者所使用的个性化环境设置文件的读取文件。 uMAIL MAIL : 当我们使用当我们使用 mail mail 这个指令在收信时,系统会去读取的邮件信箱这个指令在收信时,系统会去读取的邮件信箱文
23、件文件 (mailbox)mailbox)。 u PATH PATH : 就是执行文件搜寻的路径,目录与目录中间以冒号就是执行文件搜寻的路径,目录与目录中间以冒号(:)(:)分隔,分隔, 由于文件的搜寻是依序由由于文件的搜寻是依序由 PATH PATH 的变量内的目录来查询,所以,目录的顺序的变量内的目录来查询,所以,目录的顺序也是重要的喔。也是重要的喔。 uLANG LANG : 语系文件,很多数据都会用到他,当出现编码错误的时候往往需语系文件,很多数据都会用到他,当出现编码错误的时候往往需要设置它,中文编码是要设置它,中文编码是zh_CN.UTF8zh_CN.UTF836PATH示例举例:
24、配置java环境变量可使任何目录都能执行javac命令(1)需要配置Java环境变量u JAVA_HOME(JDK存放的路径)u CLASSPATH(字节码的位置,让JVM知道要运行的类的字节码放在哪)u PATH (让OS找到javac等命令的存放的位置)(2)在Linux下配置它们u 打开终端u vi .bash_profileu 在配置文件中追加内容 JAVA_HOME=JDK存放位置 CLASSPATH=.(当前目录) PATH=$JAVA_HOME/BIN:$PATH(不覆盖原来的内容,追加) export JAVA_HOME CLASSPATH PATHu 保存,让配置起作用(so
25、urce .bash_profile或者注销)37让环境变量的修改在退出shell再次登录时仍有效,需要在相关配置文件中修改Bash的初始化文件有:/etc/profile、/.bash_profile、/.bash_login、/.profile、/.bashrc、/etc/bashrc/etc/profile/.bash_profile/.bashrc/etc/bashrc/.bash_login/.profile38/etc/profile 存放一些全局(共有)变量,不管哪个用户,登录时都会读取该文件。通常设置一些Shell变量PATH,USER,HOSTNAME和HISTSIZE等/.
26、bash_profile:每个用户都可使用该文件输入专用于自己使用的shell信息,当用户登录时,该文件仅仅执行一次!默认情况下,他设置一些环境变量,执行用户的.bashrc文件./.bashrc:该文件包含专用于你的bash shell的bash信息,当登录时以及每次打开新的shell时,该该文件被读取./etc/bashrc:为每一个运行bash shell的用户执行此文件.当bash shell被打开时,该文件被读取.39上述配置文件的作用1)登录Linux先启动系统配置文件/etc/profile,并从/etc/profile.d目录的配置文件中搜集shell的设置,为系统的每个用户设
27、置环境信息。2)用户配置文件/.bash_profile,每个用户专用于自己使用的shell信息,仅用户登录时执行一次!默认情况下,此文件通过脚本执行同目录下用户的.bashrc文件。3)/.bashrc文件包含专用于用户bash shell的bash信息,登录及每次打开新的shell时都会执行。里面又会调用/etc/bashrc40设置用户自己的环境变量在/home/user/.bash_profile中定义下句,会怎样?alias la=ls a|grep “.*”答:user下次再登陆,其shell会自动建立一个别名命令la,功能为查看当前目录下名字以.开头的文件。写在/.bash_pr
28、ofile中,需重新登录才能有效。除非运行source .bash_profile使其立即有效。写在/.bashrc中,则打开新的终端中就有效区别:bash_profile只在会话开始的时候读取一次,而bashrc则每次打开终端时都会读取按照传统,定义的变量如PATH放到.bash_profile中,而像别名函数等放在.bashrc中,但是.bash_profile先于.bashrc读取内容,也可全放入.bashrc中习惯用各自的配置文件,编辑不需要习惯用各自的配置文件,编辑不需要root权限权限413、内部变量 内部变量是Linux所提供的一种特殊类型的变量,这类变量在程序中用来作出判断。在
29、shell程序内这类变量的值是不能修改的。部分内部变量是:u$# 传送给shell程序的位置参数的数量u$?最后命令的完成码或者在shell程序内部执行的shell程序(返回值)u$0shell程序的名称u$*调用shell程序时所传送的全部参数的单字符串, “参数1”“参数2”形式保存的参数42u$“参数1”“参数2”形式保存的参数u$n第n个参数u$本程序的PIDu$!上一个命令的PID43使用shell预定义变量的脚本举例444 位置参数(1) 位置参数及引用 可以编写一个shell脚本,当从命令行或者从其他shell脚本中调用它的时候,这个脚本接收若干参数。这些选项是通过Linux作为
30、位置参数(positional parameter)提供给shell程序的。在shell脚本中应有变量,接收实参,这类变量的名称很特别,分别是1,2,3,这类变量称为位置变量。位置参数1存放在位置变量1中,位置参数2存放位置变量2中,在程序中可以使用$1,$2,来访问,举例: 45(2) 用set命令为位置参数赋值在shell程序中可以利用set命令为位置参数赋值或重新赋值。一般格式:set 参数表说明:该命令后面无参数时,将显示系统中的系统变量的值;如果有参数将分别给位置参数赋值。46四、变量表达式1、条件判断命令testtest n1 -参数 n2(或 参数 表达式)真返回0,假返回1。(
31、1)整数,比较运算符见右表test 1 lt 4 #判断104、其他参数-a 逻辑与-o 逻辑或! 逻辑非503、控制流程shell运算符和C语言基本类似,也有分支、循环流程控制。简单举例后面例子涉及的命令seq命令:产生1-9的数字序列 比如 seq 1 4expr命令:对表达式求值直接求值命令:对被括起来的表达式求值51表达式求值:$ expr 1 + 3$ expr 2 1$ expr 1 * 3 使用*要加转义符$ echo expr 1 + 3注意:表达式中,数字和运算符指教要有空格,出现在语句中要加反引号521)分支结构if分支if$#-eq0thenecho“输入了0个参数”el
32、if$#-lt1thenecho“输入了多个参数”elseecho“输入了1个参数”ficasecase“$#”in0)echo“输入了0个参数”;1)echo“输入了1个参数”;*)echo“输入了多个参数”;esac每个分支条件后必须以两个分号结尾532)循环结构for 例子输出100内10的倍数for i in seq 1 9doecho expr $i * 10done或写 echo $(expr $i * 10)n乘号前加转义符,乘号前加转义符,与数字间要有空格。与数字间要有空格。54read 变量1 变量2 可以从键盘上读取多个变量的值,用户输入数据时,以空格或者Tab键作为分隔。
33、如果输入的数据个数不够,则从左到右对应赋值,没有输入的变量为空;如果输入的数据个数超了,则从左到右对应赋值,最后一个变量被赋予剩余的所有数据。55read a bfor i in seq $a $bdoecho expr $i * 10done输出a到b序列数各数的10倍数56while例子求1到100的和i=1sum=0while $i le 100 dosum=$sum+$i i=$i+1doneecho $sumn :直接求值命令:直接求值命令57五 命令结果重定向1stdout标准输出2stderr标准错误输出重定向到文件file,终端上只能看到标准错误:#命令 file错误重定向到文
34、件file ,终端上只能看到标准输出:#命令 2file标准输出和标准错误都重定向到file,终端上看不到任何信息:#命令 file 2&1 (等于#命令 1file 2&1)58屏蔽命令任何输出的:/dev/null 2&1cp /etc/my.conf /dev/null 2&1/dev/null空设备此句命令的结果是:1.cp命令没有目标文件,应该输出错误。 2.2&1表示错误重定向指向标准输出。3./dev/null又使标准输出重定向到空,就是不要输出信息即:一个错误的命令执行,什么功能都不实现,且没有任何信息或错误提示输出。591)command file 2file2)comman
35、d file 2&1 有什么区别? 1)的写法,stdout和stderr都直接送到file中, 会出现两个同抢占file的管道,file会被打开两次,stdout和stderr输出的信息会互相覆盖。 2)的写法将stdout直接送向file, stderr继承1的管道后,再被送往file,此时,file 只被打开了一次,也只使用了一个管道FD1,它包括了stdout和stderr的内容。 从IO效率上,前一条命令的效率要比后面一条的命令效率要低,所以在编写shell脚本的时候,常用command file 2&1 这样的写法。 還可以:還可以:命令命令 2file &2命令命令 &/dev/
36、null60* 有趣的IO Redirection$ cat file文件內容会被洗掉 $ cat file此处会没有内容 stdout、stderr 的管道先准备好才会从 stdin读内容 file 会先清空 file,然後才读进 /dev/nulldosleep 300doneecho “$user has logged on!”fi说明:(1)如果没有从命令行输入用户名,则测试$# -ne 1为“真”,显示用法提示信息。(2)程序中until语句的expression(循环条件)是who|grep “$user”命令执行的返回码,如果没有找到指定的用户名,返回码为非0(为“假”),则用s
37、leep命令暂停执行程序5分钟;找到后返回码为0(为“真”),则终止循环并显示该用户已经登录的信息。(3)采用重定向到/dev/null空文件的目的是不显示查找到的用户其他信息。70实验8.1关键代码提示1)checkusera=cut -d: -f1 /etc/passwd | grep -c “$1$”if $a -gt 0 2)printnumber判断参数是否是数a=$(echo $1|bc 2/dev/dull) if $a != $1 $1参数不是数bc计算器,进制转换命令可自学:可自学:4 4个个linuxlinux筛选数据常用工具筛选数据常用工具cut, grepcut, gr
38、ep, awk, sed, awk, sed 71截取小数点前后的子串$变量名匹配模式截掉匹配子串后剩余字符串是结果str1=$a%.*str2=$a#*.#从左向右,%从右向左搜索最长匹配符号写两次,最短匹配写1次$MYVAR=foodforthought.jpg$echo$MYVAR#*forthought.jpg$echo$MYVAR#*foodforthought.jpg$MYFOO=chickensoup.tar.gz$echo$MYFOO%.*chickensoup$echo$MYFOO%.*chickensoup.tar指定字符偏移和长度截出子串$EXCLAIM=cowabung
39、a$echo$EXCLAIM:0:3cow#从第一个字符开始,截3个字符$echo$EXCLAIM:3:7abunga#从第四个字符开始,截7个字符72作作 业业1.练习本课件给出的例子。熟练练习本课件给出的例子。熟练vi编辑器,熟悉脚本语法。编辑器,熟悉脚本语法。2.实验实验8.173更多练习1.练习vi编辑器的使用并熟练掌握它。2.简要说明shell的功能,常用的shell有哪些?3.查看系统PATH环境变量,了解可执行文件的路径信息4.如何实现用系统当前日期和时间作为第一级提示符?5.如何实现用alias命令将cp命令设置别名为copy?6.简要说明shell程序的结构。7.简要说明运行
40、shell脚本程序的几种方法。8.如果你希望编写的脚本程序在任何一个目录下都能直接执行(输入程序名后回车),则应该如何处理?741.变量的赋值方式有几种?各用在哪些场合?2.写出几个与命令行参数有关的变量并简要说明如何在脚本中引用。3.以下shell脚本文件存在什么错误?echo what month is this?read $monthecho $ month is as good a month as any.4.编写一个shell程序,它输出一个1到10之间的平方和立方对照表。5.编写一个名为reverse的shell程序,将输入的若干个命令行参数以逆序输出。n用其它循环语句编程实现本
41、题的功能。751.编写一个shell脚本程序,它能根据输入的命令行参数采取不同的动作:如果是目录,则列出该目录中的文件;如果是可执行的文件,则用shell执行之;如果是可读的文件,则分屏显示其内容。2.编写一个求平方和求立方的函数,在shell程序中调用它实现第十四题的功能。3.编写一个弹出式菜单的shell程序并实现其简单的菜单功能: * MENU * 1.copy 2.rename * 3.remove 4.find * 5.exit * *即用户按下数字1,则提示用户输入源和目的文件名后执行复制;输入数字2,则提示用户输入要更名的文件或目录名后执行更名操作;输入数字3和4分别执行删除和查
42、找操作;输入数字5,则退出该菜单shell程序的执行。76附:vi的常用命令命令命令说明说明功能键功能键命令命令说明说明功能键功能键h h向左移一向左移一个字符个字符Ctrl+fCtrl+f(b)b)向后向后( (前)前)翻一页翻一页PageDownPageDown(Pageup)(Pageup)l l向右移一向右移一个字符个字符H H移至窗口移至窗口的第一行的第一行j j向上移一向上移一个字符个字符M M移至窗口移至窗口的中间行的中间行k k向下移一向下移一个字符个字符L L移至窗口移至窗口的最后一的最后一行行0 0移动到该移动到该行首行首HomeHomeG G移至文件移至文件的最后行的最后
43、行$ $移动到该移动到该行之末行之末EndEndnGnG移至文件移至文件第第n n行行命令模式的常用命令命令模式的常用命令77命令命令说明说明命令命令说明说明x x删除光标后的字符删除光标后的字符s s删除光标所在字符,删除光标所在字符,并进入输入状态并进入输入状态X X删除光标前的字符删除光标前的字符S S删除光标所在行,并删除光标所在行,并进入输入状态进入输入状态dddd删除光标所在的行删除光标所在的行u u恢复刚才被修改的文恢复刚才被修改的文本本nddndd删除包括光标所在行删除包括光标所在行的的n n行文本行文本U U恢复光标所在行的所恢复光标所在行的所有修改有修改r r修改光标所在字
44、符修改光标所在字符. .重复上一次命令操作重复上一次命令操作R R进入替换状态,直至进入替换状态,直至按按EscEsc回到指令模式回到指令模式状态状态删除与修改删除与修改78命令命令说明说明命令命令说明说明Y Y复制到当前行的编复制到当前行的编辑缓冲区辑缓冲区p p将编辑缓冲区的内容将编辑缓冲区的内容粘贴到光标后的一行粘贴到光标后的一行nYnY复制当前行开始的复制当前行开始的n n行至编辑缓冲区行至编辑缓冲区P P将编辑缓冲区的内容将编辑缓冲区的内容粘贴到光标前的一行粘贴到光标前的一行79命令命令说明说明命令命令说明说明:q:q结束编辑结束编辑:x:x若有修改存盘若有修改存盘退出退出:q!:q
45、!强制离开强制离开vivi,放弃存盘放弃存盘:e filename:e filename编辑名为编辑名为filenamefilename的文的文件件:w:w存盘存盘:set nu:set nu显示行号显示行号:w filename:w filename将编辑内容为将编辑内容为名名filenamefilename的的文件文件:set nonu:set nonu不显示行号不显示行号:wq:wq存盘并退出存盘并退出/exp/exp往前查找字符往前查找字符串串expexpZZZZ存盘并退出存盘并退出?exp?exp往后查找字符往后查找字符串串expexp末行命令模式的常用命令末行命令模式的常用命令80