第4章 Linux shell程序设计 (8学时)

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

第4章Linuxshell程序设计主要内容™shell的主要特点、类型、建立和执行的方式™变量的分类、定义形式及引用规则™各种控制语句的格式、功能及流程™算术运算的使用™函数的构成及使用规则™内置命令4.1shell概述4.1.2shell程序示例【例4.1】由三条简单命令组成的shell程序(文件名为ex1)。$catex1datepwdcd..还有带有控制结构的shell程序,如if、for语句注意:注意:PPTPPT中凡是红色代码部分表示输入的命令,绿色代码表示输出的结果中凡是红色代码部分表示输入的命令,绿色代码表示输出的结果4.1.3shell脚本的建立和执行shell脚本的建立:利用编辑器录入和编辑,如vi通常用户不能直接执行由文本编辑器建立的shell脚本,因为直接编辑生成的脚本文件没有“执行”权限,执行执行shellshell脚本的三种方式:脚本的三种方式:(1)输入定向到shell脚本:用输入重定向方式让shell从给定文件中读入命令行,并进行相应处理;$bash脚本名(红旗版本Linux系统的默认shell是bash)例如:$bashex1(4.5.3节会详细讲解输入输出重定向)(2)以脚本名作为bash参数其一般形式是:$bash脚本名[参数]例:$bashex2/user/meng/usr/zhang优点:可以在脚本名后面带有参数,从而将参数值传递给程序中的命令,使得一个shell脚本可以处理多种情况,可以用来进行程序调试;(3)将shell脚本的权限设置为可执行,然后在提示符下直接执行它。要用chmod命令将其设置为有“执行”权限$chmoda+xex2$PATH=$PATH:.$ex2说明:™第二行将当前工作目录(以“.”表示)添加到命令搜索路径中;™该脚本所在的目录应被包含在命令搜索路径(PATH)中;™其中$PATH表示引用变量的值;™“:”是在PATH变量中,不同路径之间的分隔符;【例4.1】4.2命令历史4.2.1显示历史命令¾bash提供了命令历史的功能,即:系统为每个用户维护一个命令历史文件,其默认目录是“~/.bash_history”;其中“~”表示注册用户的主目录;¾作用便于调用、修改和快捷执行命令,把全部或部分先前命令作为新命令,予以快捷执行。语法格式是:history[option][arg…]™常用的选项有:-a在历史文件中添加“新”历史命令行。-n从历史文件中读取尚未读入的历史命令行,添加到当前历史清单中。-r读取历史文件的内容,并把它作为当前的历史命令。-w把当前的历史写到历史文件中,覆盖原有内容。-c删除历史清单中所有的项。™如果不带任何参数,则history命令会显示历史命令的清单™如果history后给出一个正整数(如50),就只显示历史表中的昀后50行命令™如果history后给出一个文件名,就把它作为历史文件名4.2.2执行历史命令™执行历史命令是命令替换之一,它以字符“!”开头、后随1个或多个字符,用来定义用户所需的某种类型的历史命令,™例:P87基本的事件指定字格式格式意义!!重复上一条命令,也就是“!-1”!n重新执行第n条历史命令!-n重新执行倒数第n条历史命令。!-1就等于!!!string重新执行以字符串string开头的昀近的历史命令行。!?string?重新执行昀近的、包含字符串string的那条历史命令!#到现在为止所输入的整个命令行$date一6月2621:35:18CST2006$pwd/home/mengqc$lsdesktopex1ex3exam15myfilem1$catm1echohello!$history1date2pwd3ls4catm15history$!2pwd/home/mengqc$!ccatm1echohello!$!?w?pwd/home/mengqc【例4.2】0-1.22’4.2.3用环境变量配置历史命令环境™在默认方式下,bash使用用户主目录下面的文件“.bash_history”来保存命令历史注:以圆点“.”开头的文件名是隐含文件,默认方式下,使用ls命令不能把它们显示出来。™用户可以通过重新为环境变量赋值,改变存放历史命令的文件$HISTFILE=/home/mengqc/.myhistory™还可以重新设定能够保留的命令个数$HISTSIZE=6004.4别名4.4.1定义别名一般语法格式为:alias[name[=value]]…™如果没有指定参数,将在标准输出(屏幕)上显示别名清单™定义别名时,往往用单引号将它代表的内容括起来,从而防止shell对其中的内容产生歧义,如:空格和特殊字符。优点:可以简化输入,方便用户,减少出错率例:$aliasalias..=‘cd..’aliascp=‘cp-i’注意:等号两边不能有空格例:$aliasll=‘ls-l’$my=/home/mengqc(定义变量并赋值)$ll$my引用变量值要用单引号例:$aliasll=ls-lbash:alias:‘-l’notfound$pwd/home/mengqc$llm1lnm2ttt在此情况下,执行ll别名命令时,并不是执行ls–l,而是ls不用单引号的结果:【例4.3】假定/home/mengqc目录下有m1,ln,m2,ttt四个文件4.4.2取消别名™如果想取消先前定义的别名,可使用如下命令:unaliasname…™可以一次将所有的别名都从别名表中删除,使用如下命令:unalias-a4.5shell特殊字符4.5.1通配符1.一般通配符™*(星号),它匹配任意字符的0次或多次出现™?(问号),它匹配任意一个字符4.5.2引号1.双引号™由双引号括起来的字符(除$、倒引号(`)和反斜线(\)外)均作均作为普通字符为普通字符对待。2.单引号™由单引号括起来的字符都作为普通字符出现都作为普通字符出现3.倒引号`位于键盘的左上角™倒引号括起来的字符串被shell解释为命令行,先执行该命令行,并以它的标准输出结果取代整个倒引号部分。™倒引号还可以嵌套使用。™注意,嵌套使用时内层的倒引号必须用反斜线(\)将其转义。【例1】$catex3echo“currentdirectoryis`pwd`”echo“homedirectoryis$HOME”echo“file*.?”echo“directory‘$HOME’”$ex3currentdirectoryis/home/zhang/proghomedirectoryis/home/zhangfile*.?directory‘/home/zhang’此时单引号作为普通字符,而非特殊字符输出是?【例2】$str=‘echo“directoryis$HOME”’$echo$strecho“directoryis$HOME”整体都作为普通字符赋值给变量str$echo‘Thetimeis`date`,thefileis$HOME/abc’Thetimeis`date`,thefileis$HOME/abc$echocurrentdirectoryis`pwd`currentdirectoryis/home/zhang$today=`date`$echoTodayis$todayTodayis一6月2621:40:18CST2006倒引号还可以嵌套使用。但应注意,嵌套使用时内层的倒引号必须用反斜线(\)将其转义。【例3】$usrnum=`echoThenumberofusersis\`who|wc-l\``$echo$usernumThenumberofusersis5此外,转义字符(即反斜线\)能把特殊字符变成普通字符:输出是?例:$echo“FilenameisNo\$\*”FilenameisNo$*4.5.3输入/输出重定向符™执行一个shell命令时,通常自动打开三个标准文件,即1.标准输入文件(stdin),通常对于键盘;2.标准输出文件(stdout);3.标准出错输出文件(stderr),这两个文件都对应屏幕。™在shell中,这三个文件都可以用重定向符进行重新定位11.输入重定向符.输入重定向符““””作用:把命令的标准输入定向到指定的文件™一般形式是:命令文件名™经常需要执行的shell命令可以放进一个文件,并且让shell从该文件读取这些命令,例如:$catcmdsecho“yourworkingdirectoryis`pwd`”echo“yournameis`logname`”echo“thetimeis`date`”who$bashcmdsShell命令解释程序将从文件cmds中读取命令,并加以执行。22.输出重定向符.输出重定向符““””作用:把命令的标准输出重新定向到指定的文件一般形式是:命令文件名如:$whoabc$catabcwho命令的输出重定向到abc文件中,屏幕上看不到执行who命令的结果,可以查看abc文件的内容即可看到。此外,shell脚本文件的输出也可以重定向到指定的文件,例如:注:™执行脚本文件后,才能把重定向的目标文件显示出来,正是exp1文件的执行结果;™如果不同的输出都重定向到同一文件,那么只有昀后一次执行的输出保留在文件中,原有内容被覆盖。$catexp1echo“thetimeis`date`”echo“workingdirectoryis`pwd`”echo“ithas`ls–l|wc-l`files”$exp1tmp1$cattmp1【例4】输出是?thetimeis一6月2621:43:00CST2006workingdirectoryis/home/mengqcithas26files™输入和输出重新定向可以连在一起使用。例如:$wc-linfileoutfile功能是:命令wc从文件infile中输入信息,按“行”统计后的结果送到另一个文件outfile中,不在屏幕上显示。33.输出附加定向符.输出附加定向符““””把命令的标准输出附加到指定文件的后面,原有内容不变一般形式是:命令文件名如:$ps-lpsfileps命令的输出附加到psfile文件的结尾处。55.与文件描述字有关的重定向.与文件描述字有关的重定向Linux系统中每个打开的文件,都由系统赋予的一个文件描述字,是个小整数。文件打开后,用户可以直接用描述字来引用相应的文件。™系统为每个进程自动打开三个标准文件标准输入、标准输出、错误输出,其文件描述字分别为0,1和2。™标准错误输出也可重定向到一个文件中,其一般形式是:命令2文件名命令2文件名例:$gccm1.c2errfile功能是:对C源文件m1.c进行编译,并把编译过程中产生的错误信息重定向到文件errfile中,其中数字2表示标准错误输出的文件描述字。不能有空格4.5.4注释、管道线和后台命令11.注释:以.注释:以##开头的正文行表示注释开头的正文行表示注释如果shell脚本中第一行是以“#!”开头,则后面所跟的字符串就是所使用的shell的绝对路径名。例如:对于Cshell脚本,第一行通常是:#!/bin/csh对于bash脚本,第一行通常是:#!/bin/bash这一行说明,该脚本是用哪一种shell编写的,从而调用相应的解释程序予以执行。22.管道线.管道线™管道线是由竖杠“|”隔开的若干个命令组成的序列,每个命令执行时都有一个独立的进程,前一个命令的输出是下一个命令的输入;™管道线中有一类命令也成为“过滤器”,即:首先读取输入,然后将以某种简单方式进行变换,相当于过滤,再将处理结果输出,如:grep,sort,wc等命令就是过滤器;一个管道线中可以包括多条命令:ls-l$HOME|wc–lls|grepm*.c|wc–l显示当前目录中文件名是以m开头的C文件的数目该命令的功能是什么?33.后台命令.后台命令™前台方式:命令提示符之后输入,立即执行™后台方式:可能有些程序的执行需要花费较长时间,如:调用C编译器对C程序进行编

1 / 114
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功