您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 咨询培训 > Linux-shell及其shell编程
shell及shell编程概述shell是UNIX系统用用户与操作系统交互的最基本工具,实际上shell除了有命令解释执行的功能外,还具备有其他的功能,如:系统环境的设置输入输出的重新定向shell程序语言的设计等。1shell基本概念不同类型的shell在应用中各有所长,但是它们主要要完成的功能是相似的。最基本的有以下四个重要功能命令的解释执行:输入输出的重新定向shell程序语言的设计等。环境变量的设置1.1UNIX系统的标准流流是一个很形象的概念,当程序需要读取数据的时候,就会开启一个通向数据源的流,这个数据源可以是文件,内存,或是网络连接。类似的,当程序需要写入数据的时候,就会开启一个通向目的地的流。这时候你就可以想象数据好像在这其中流动一样在UNIX系统中,文件的组织方式是按字节进行的,文件之间,设备之间的信息传递是按字节流完成的。因此信息流的概念在UNIX中很重要。1.1.1命令处理流在操作系统中,如果将命令处理看作是“加工”那么向此“加工”输入的命令信息和由这个“加工”输出的信息可以看作信息流。如果不考虑“信息流”中包含的具体内容,只关心“信息流”和“加工”之间的关系,我们可以将命令处理中的“信息流”描述为:“命令输入信息流”和“命令输出信息流”,或者简称为“命令输入流”“命令输出流”,它们都属于命令处理流。1.1.2信息流在UNIX系统中,对输入输出信息流作了如下定义文件描述符标准定义默认映射对象0标准输入流键盘1标准输出流显示器2标准错误流输出错误信息系统启动Shell程序时缺省给定了3个标准流,标准输入流(stdin),标准输出流stdout,标准错误流stderr。之所以这么区分是因为在早期的计算机系统如PDP-11的一些限制。那时没有GUI,将输出分为stdout,stderr可以避免程序的调试信息和正常输出的信息混杂在一起。2shell基本功能2.1Shell命令解释2.2输入输出流重定向2.3错误流重定向2.4管道线处理2.5用户工作环境设置2.6Shell程序设计2.2shell输入输出重定向默认状态下,shell将命令的输入流设定为键盘,输出流设定为显示器,错误流也定义为显示器。但是在有些情况下,我们可以改变这些流的设定。改变流的设定常用的符号有,,三个符号。例如:ls-lls.txtls-l/home/user1ls.txtls-l/home/user1ls.txt2.2shell输入输出重定向重定向符<表示将标准输入从键盘重新定义到另外的流。例如:proginfile,即prog命令将从文件infile中读取参数。执行一个shell程序也可以使用这种方式。例如shuser1.sh就表示要执行user1.sh这个shell程序。重定向符,,也能够混合使用,例如:proginfileoutfile表示prog命令从infile中获取命令参数,然后将执行结果输出到文件outfile中。2shell基本功能2.1Shell命令解释2.2输入输出流重定向2.3错误流重定向2.4管道线处理2.5用户工作环境设置2.6Shell程序设计2.3错误流重定向在UNIX系统中,错误信息流是指在命令或程序执行中出现错误时系统给出的提示或警告信息,UNIX中将它们作为一个独立的标准输出流进行定义,错误信息流通常定义为显示器。当然,用户也可以根据需要对它进行重定向。不同的shell在这方面有所不同。Cshell中使用的错误流重定向符是:&,例如:ccabc.c&log.txt,即将编译过程中的输出流和错误流定向为log.txt文件。在Bshell中则不用,需要如下书写:ccabc.c2&1log.txt2shell基本功能2.1Shell命令解释2.2输入输出流重定向2.3错误流重定向2.4管道线处理2.5用户工作环境设置2.6Shell程序设计2.4管道线处理管道线可以实现将一个程序或命令的输出作为另外一个程序或命令的输入,管道线作为两个命令之间的分隔符。管道线的符号是“|”。例如有这样一组命令:$ls–ltempfile$wc–ltempfile$rmtempfile管道线处理:$ls-l|wc-l2.4管道线处理除此之外,还有“;”、“&”、“&&”、“||”可替代管道线“|”作为命令列表的分隔符.其中:“;”:表示多个命令顺序执行“&”:命令行尾输入,表示将命令的执行过程放到后台处理。“&&”:代替原有的符号“|”,表示当左边的命令为“真”值时,执行右边的命令。“||”:代替原有的符号“|”,表示当左边的命令为“假”值时,执行右边的命令。2.4管道线处理例如:(a)pwd;who;ls–l(b)ccprgm.c&(c)writezhangletter||mailzhangletter(d)mailzhangletter&&rmletter1.获得磁盘空闲空间块数涉及的命令:(a)df(b)head-n:将输出信息从头截取n行(c)tail–n:将输出信息从尾截取n行(d)tr:将标准输入拷贝到标准输出(输入输出可以重定向),同时根据选项进行其他操作:-dC将输入的所有C删除-sC将输入中所有的两个相连CC改为单个C-s“[]”将输入中所有的两个相连空格改为单个空格(e)cut习题1.获得磁盘空闲空间块数(答案)习题[root@redhat]#dfFilesystem1k-blocksUsedAvailableUse%Mountedon/dev/hda255423081147592411318022%/none25665202566520%/dev/shm[root@redhat]#df|head-2|tail-1|tr-s[]“|cut-d“-f44113180[root@redhat]#2.列出当前目录下占用磁盘空间最大的20个文件信息,并将这些信息存入到tempfile文件中。涉及的命令:(a)du显示文件或目录所占的磁盘空间-s只显示设定文件目录的空间总量-a可以接收多个文件,并一一显示所占的磁盘空间(b)sort:文件排序-n以数值大小作为排序依据-r以相反方向排序-b排序时,忽略每行前面的空格和制表符习题答案:$du-a|sort-nrb|head-20tempfile2.5用户工作环境设置由于shell程序在UNIX系统中的特殊作用,每一个进入UNIX系统的用户都必须选择一种shell作为工作环境。每种shell都提供一种工作模式,而工作模式的确定是由一组工作环境变量来决定的。1)工作环境变量在shell中可以提供一种维护工作环境变量的服务。这里,所谓的环境变量是说那些当前用户工作中可以修改的变量。在UNIX系统中,随着用户正常地登录进系统时,根据用户注册时登记的相关信息,用户的工作环境变量也随之确定下来,通常会有10-30个永久性的变量与用户的登录标识联系在一起。2.5用户工作环境设置这些变量是用户在登录时进行赋值的,由shell统一维护,在用户注销时自动撤销。这些变量大部分是用户的基本的永久性变量,在用户工作时是不变的。但也有一部分变量是为了特殊目的而设定的,这些变量对用户有很大的针对性,同时也为用户提供了一定的自由度,因此它们允许用户根据自己的需要自行修改和调整。Dos用户通常都知道,在系统启动时会自动执行启动盘根目录下的autoexec.bat文件(如果有这个文件)。这个文件可以完成PATH,PROMPT等环境变量的设置。同样的,UNIX系统下也有这种文件,而且通常不止一个,而是成一组的好几个文件。当然,根据用户设置的登录后使用的shell类型的不同,这些文件也有所不同。如果使用bsh,一般会有.bsh_profile,.bshrc,.bsh_logout等文件,如果是cshell,会有.cshrc这个文件,但是作用基本是相同的,都是设定用户缺省的环境变量。这些文件中的内容用户可以根据需要进行修改,以设成自己需要的内容。2.5用户工作环境设置2)Bshell的环境变量bshell是使用最广泛的UNIX系统,我们可以了解一下bshell的环境变量的设置。在用户目录下有.bash_profile,.bashrc,.bash_logout三个和环境变量相关的文件,其中.bash_profile就相当于dos下面的autoexec.bat,我们来看看一个典型的.bash_profile的内容:2.5用户工作环境设置#.bash_profile#Getthealiasesandfunctionsif[-f~/.bshrc]then.~/.bshrcfi#UserspecificenvironmentandstartupprogramsPATH=$PATH:$HOME/binechowelcomeMrtest,youcanworkwellunderBshellexportPATH2.5用户工作环境设置它在执行的时候会调用.bshrc,内容如下:#.bshrc#Userspecificaliasesandfunctions#Sourceglobaldefinitionsif[-f/etc/bashrc];then./etc/bashrcfi2.5用户工作环境设置这个shell会继续调用/etc/bashrc这个文件,在这个shell中将设置环境变量。正常登录后,一个Bshell的环境大致如下所示:INPUTRC='/etc/inputrc'USER='test'MAIL='/var/spool/mail/test'HOSTNAME='linux9'OLDPWD='/home/test'HOME='/home/test'SUPPORTED='zh_CN.GB18030:zh_CN:zh:en_US.UTF-8:en_US:en'G_BROKEN_FILENAMES='1'PS1='$'PS2=''2.5用户工作环境设置LOGNAME='test'_='clear'COLORS='/etc/DIR_COLORS'TERM='ansi'PPID='3296'PATH='/usr/local/bin:/bin:/usr/bin:/usr/X11R6/bin'REMOTEHOST='202.103.65.22'LANG='en_US.UTF-8'HISTSIZE='1000'SHELL='/bin/bsh'PWD='/home/test/t‘其他的shell如Cshell,Kshell均是大同小异2.6Shell程序设计在UNIX系统中使用shell程序设计,可以完成比较复杂并且自动执行的任务。UNIX系统上的shell程序在本质上是一种解释执行的脚本语言,使用的元素是UNIX系统的命令集,它与windows系统中的bat批处理文件原理相同,但是比批处理文件更强大,也更灵活。本节内容我们将使用B-shell进行shell程序设计。1Shell程序的执行方式2Shell程序的变量使用3test命令的使用4条件控制语句5Shell程序调试2.6.1Shell程序的执行方式Shell程序有多种执行方式,比如,我们建立一个比较简单的shell程序脚本,文件保存命名为test.sh,内容如下:datewhops执行这个test.sh可以有多种方式。1)将test.sh作为shell命令的执行参数来完成该shell的执行:$shtest.sh2)利用输入输出的重定向方式$shtest.sh3)直接执行该shell程序,但首先要保证该shell程序具备可执行的权限,可以用chmod来修改:chmoda+xtest.sh,之后在命令行执行它$test.sh2.6.2Shell程序的变量使用如果shell程序只能简单地执行一些命令,那shell的功能无疑是非常弱的,幸运的是,shell程序被设计为可以支持变量的使用,比如定义变量,应用变量的值等等。这使得shell程序具有异常强大的功能。需要注意的是,shell的变量只有字符串型,在shell程序中出现的数值计算
本文标题:Linux-shell及其shell编程
链接地址:https://www.777doc.com/doc-1904967 .html