欢迎来到淘文阁 - 分享文档赚钱的网站! | 帮助中心 好文档才是您的得力助手!
淘文阁 - 分享文档赚钱的网站
全部分类
  • 研究报告>
  • 管理文献>
  • 标准材料>
  • 技术资料>
  • 教育专区>
  • 应用文书>
  • 生活休闲>
  • 考试试题>
  • pptx模板>
  • 工商注册>
  • 期刊短文>
  • 图片设计>
  • ImageVerifierCode 换一换

    [精选]Shell基础与编程技术讲义.ppt

    • 资源ID:96462552       资源大小:1.46MB        全文页数:90页
    • 资源格式: PPT        下载积分:25金币
    快捷下载 游客一键下载
    会员登录下载
    微信登录下载
    三方登录下载: 微信开放平台登录   QQ登录  
    二维码
    微信扫一扫登录
    下载资源需要25金币
    邮箱/手机:
    温馨提示:
    快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。
    如填写123,账号就是123,密码也是123。
    支付方式: 支付宝    微信支付   
    验证码:   换一换

     
    账号:
    密码:
    验证码:   换一换
      忘记密码?
        
    友情提示
    2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
    3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
    4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
    5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

    [精选]Shell基础与编程技术讲义.ppt

    第四章Shell基础与编程技术4.1 SHELL概述4.2 SHELL程序设计基础4.3 SHELL基本命令4.4 SHELL变量4.5 SHELL程序流程4.6 程序调试4.7 SHELL编程综合范例4.8 实战技巧 系统资源查看与多命令执行4.1 shell概述Shell是最基础和实用的是最基础和实用的linux工具,熟练掌握工具,熟练掌握shell技巧及其技巧及其使用方法,是用好使用方法,是用好linux的关键。用户对的关键。用户对shell的熟练程度直的熟练程度直接表达用户的接表达用户的linux编程水平。本章先了解编程水平。本章先了解shell,进而掌握,进而掌握shell命令、变量和程序控制结构、程序调试,最后通过理命令、变量和程序控制结构、程序调试,最后通过理解综合范例,把握编程技巧,到达学以致用的目的。解综合范例,把握编程技巧,到达学以致用的目的。shell是一个工具程序,在用户登录后由系统启动,解释并是一个工具程序,在用户登录后由系统启动,解释并运行由命令行或脚本文件输入的命令,实现用户与内核间运行由命令行或脚本文件输入的命令,实现用户与内核间的交互。的交互。Shell提供的变量、赋值语句、控制流等基本操作语句与高提供的变量、赋值语句、控制流等基本操作语句与高级语言中的函数调用极为相似,除了关键字与语法规则不级语言中的函数调用极为相似,除了关键字与语法规则不同外,还有两点不同。一是参数可以为任意字符串,多数同外,还有两点不同。一是参数可以为任意字符串,多数情况下字符串不用引号;二是参数表不用括号,各参数之情况下字符串不用引号;二是参数表不用括号,各参数之间也不用逗号分隔。间也不用逗号分隔。Linux系统提供了多种不同的系统提供了多种不同的shell。常用的有。常用的有Bourneshell简称简称sh、C-shelll简称简称csh、Kornshell简称简称ksh和和BourneAgainshell简称简称bash。它们的渊源和区。它们的渊源和区别,请读者自己到网上遨游一下,便略知一二。别,请读者自己到网上遨游一下,便略知一二。目前目前linux系统的缺省系统的缺省shell分别是分别是BourneAgainshell,即,即bash。要知道所用的要知道所用的linux有哪些版本的有哪些版本的shell,可以查看,可以查看/etc/shell目录下的文件。查看命令行如下目录下的文件。查看命令行如下:$cat/etc/shells还可以用下面的命令来查看当前的还可以用下面的命令来查看当前的shell类型:类型:#echo$SHELL其中的其中的“$SHELL是环境变量,记录使用的是环境变量,记录使用的shell型。可以型。可以用用$exit命令退出当前命令退出当前shell。4.2 shell程序设计基础shell擅长系统管理,擅长系统管理,shell脚本实质是命令批处理。复杂脚本一般包括判脚本实质是命令批处理。复杂脚本一般包括判断、循环、文件测试等程序结构。这时应对断、循环、文件测试等程序结构。这时应对linux工具集有一些理解。工具集有一些理解。工具工具grep、sed和和awk等,在处理命令输出和文件时功能很强大。建立等,在处理命令输出和文件时功能很强大。建立shell脚本的步骤同建立文本文件相同。用脚本的步骤同建立文本文件相同。用vi等进行程序录入和编辑,等进行程序录入和编辑,也可以用也可以用cat和管道等命令直接建立一个脚本文件。和管道等命令直接建立一个脚本文件。【例】【例】4.1建立一个建立一个shell脚本,在提示符后输入显示和重定向命令:脚本,在提示符后输入显示和重定向命令:$catmyprogram回车后直接输入命令,再回车并输入命令,如下回车后直接输入命令,再回车并输入命令,如下所示:所示:#!/bin/sh#filename:myprogramx=helloworld.echo$xy=myfirstshellprogram.echo$yexit完成编辑按住完成编辑按住Ctrl+Z退出,则退出,则myprogram的的shell脚本程序就完成了,返回脚本程序就完成了,返回shell命令状态。命令状态。同其他语言一样,也可以通过使用任意一种文字编辑器,比方同其他语言一样,也可以通过使用任意一种文字编辑器,比方nedit、kedit、emacs、vi等来编写等来编写shell程序。程序最好以程序。程序最好以“#!/bin/sh为开为开始的第一行。符号始的第一行。符号#!用来告诉系统它后面的参数是用来执行该文件的程用来告诉系统它后面的参数是用来执行该文件的程序。在这个例子中使用序。在这个例子中使用/bin/sh来执行程序。当脚本编好后,要执行该来执行程序。当脚本编好后,要执行该脚本还要改变其文件为可执行文件属性。但在脚本还要改变其文件为可执行文件属性。但在cygwin的的linux模拟环境模拟环境中可以直接执行而无需改变其文件属性。中可以直接执行而无需改变其文件属性。改变脚本文件成为可执行文件属性的命令行的写法是:改变脚本文件成为可执行文件属性的命令行的写法是:$chmod+xmyprogram或或$chmod755myprogram最后,执行该程序的命令行写法是:最后,执行该程序的命令行写法是:$./myprogram或或$bashmyprogram回车就可以看到程序的执行结果:回车就可以看到程序的执行结果:helloworld.myfirstshellprogram.在在shell编程时,以编程时,以#开头的句子表示这一行为注释。开头的句子表示这一行为注释。Shell对用户输入的命令即文件名进行分析。如果文件标记为可执行,对用户输入的命令即文件名进行分析。如果文件标记为可执行,但不是编译过的程序,但不是编译过的程序,shell把它看作把它看作shell脚本,并解释执行。脚本,并解释执行。用户开发的用户开发的shell脚本可以驻留在命令搜索路径的目录之下如脚本可以驻留在命令搜索路径的目录之下如/bin、/usr/bin等,像普通命令一样使用。通过这样方式可以扩充新命令。等,像普通命令一样使用。通过这样方式可以扩充新命令。shell脚本经常被用来执行重复性的工作。当进入系统时要查看有无信脚本经常被用来执行重复性的工作。当进入系统时要查看有无信件、现有用户群、将工作目录改为指定目录、显示当前日期等。完成件、现有用户群、将工作目录改为指定目录、显示当前日期等。完成这些工作的命令是固定的,可把它们写入一个这些工作的命令是固定的,可把它们写入一个shell脚本中,每次批处脚本中,每次批处理完成。理完成。有些固定工作的命令很复杂,如文件系统安装有些固定工作的命令很复杂,如文件系统安装mount带多个选项和参带多个选项和参数,此时用数,此时用shell脚本存放该命令,就能提高效率。脚本存放该命令,就能提高效率。shell的基本功能有运行程序、输入输出重定向、变量和文件名的替换、的基本功能有运行程序、输入输出重定向、变量和文件名的替换、管道、编程与环境的控制等。管道、编程与环境的控制等。RedHatLinux带有不少快捷方式。带有不少快捷方式。就是就是home目录的简写形式。如目录的简写形式。如想把一个名为想把一个名为sometext的文件复制到的文件复制到home目录下的目录下的docs子目子目录中,可以用录中,可以用#cpsometext/docs实现。另外,实现。另外,$cd回车可随时回到回车可随时回到home目录。目录。1bash 配置文件在用户的在用户的home目录下,运行命令:目录下,运行命令:$ls.bash*将会看到这些文件:将会看到这些文件:.bash_history:记录了用户以前输入的命令。:记录了用户以前输入的命令。.bash_logout:当用户退出:当用户退出shell时,要执行的命令。时,要执行的命令。.bash_profile:当用户登入:当用户登入shell时,要执行的命令。时,要执行的命令。.bashrc:每次翻开新的:每次翻开新的shell时,要执行的命令。时,要执行的命令。其中其中.bash_profile只在会话开始时读取一次,而只在会话开始时读取一次,而.bashrc每次翻开新终每次翻开新终端时都被读一次。端时都被读一次。.bash_profile经常设置先读经常设置先读.bashrc文件,用户能把文件,用户能把所有配置都放进所有配置都放进.bashrc里。里。这些是用户个人设置,系统级设置在这些是用户个人设置,系统级设置在/etc/profile、/etc/bashrc及目录及目录/etc/profile.d下的文件里。当系统与用户设置发生冲突时,用户设置下的文件里。当系统与用户设置发生冲突时,用户设置有效。有效。2提示符每翻开一个控制台每翻开一个控制台console或或xterm时,先看到提示符。默认提示符将显示用户名、时,先看到提示符。默认提示符将显示用户名、主机名默认主机名默认localhost、当前目录、当前目录表示表示home目录,最后一个字符是目录,最后一个字符是普通用户普通用户$或是或是root#的标记。用户通过的标记。用户通过$PS1设置提示符。设置提示符。命令:命令:echo$PS1将显示当前的设定。默认设定提示符显示的只是当前目录的最后局将显示当前的设定。默认设定提示符显示的只是当前目录的最后局部。可以用部。可以用pwd输出当前目录,输出当前目录,printworkingdirectory查看细节。查看细节。怎样让怎样让shell自动告诉用户的当前目录呢?自动告诉用户的当前目录呢?提示符等信息一般包含在文件提示符等信息一般包含在文件/etc/bashrc中,用户可以通过编辑各自中,用户可以通过编辑各自home目录下目录下的的.bash_profile和和.bashrc来改变设置。来改变设置。在在manbash中的中的PROMPTING局部,对这些参数有详细说明。用户可以自行设置局部,对这些参数有详细说明。用户可以自行设置内容如时间、命令历史记录号或不同颜色等。内容如时间、命令历史记录号或不同颜色等。在在/.bashrc中,用户比较清晰的设定是:中,用户比较清晰的设定是:PS1=0331mw0330mroot在在/.bashrc中的设定是:中的设定是:PS1=0330;31mw0330m这时用户得到的提示符是:这时用户得到的提示符是:/usr/bin当用当用root时,变成:时,变成:/usr/bin用户已去掉了主机名和用户名。普通用户提示符可以是黑底白字或白底黑字。用户已去掉了主机名和用户名。普通用户提示符可以是黑底白字或白底黑字。3改变$PATH$PATH与与$PS1都是环境变量。输入都是环境变量。输入set将列出所有当前定义的环境变量。将列出所有当前定义的环境变量。用户看到的环境变量在用户看到的环境变量在shell配置文件中的定义,可能是用户自己的配置文配置文件中的定义,可能是用户自己的配置文件,也可能是由件,也可能是由root通过通过/etc下面的系统级文件定义的。如果用户使用下面的系统级文件定义的。如果用户使用X,更多的变量将由,更多的变量将由X和用户窗口管理器或桌面环境的启动文件配置。和用户窗口管理器或桌面环境的启动文件配置。了解如何改变了解如何改变$PATH变量很有用,它决定了变量很有用,它决定了shell寻找命令或程序的目录路寻找命令或程序的目录路径。假设要执行命令的目录在径。假设要执行命令的目录在$PATH中,用户就不必输入这个命令的完中,用户就不必输入这个命令的完整路径,能够直接执行。第三方软件一般没有把可执行文件放到标准目整路径,能够直接执行。第三方软件一般没有把可执行文件放到标准目录中,需要添加到录中,需要添加到$PATH中,才能保证程序的正常运行。中,才能保证程序的正常运行。用户如何处理一般的环境变量是有技巧的。所有环境变量名都大写,用户也用户如何处理一般的环境变量是有技巧的。所有环境变量名都大写,用户也可以自定义一些非大写的变量,如可以自定义一些非大写的变量,如$path、$pAtH,但,但shell不知道这不知道这些变量。变量名有时以些变量。变量名有时以$开头,有时不是。当设置一个变量时,用户直开头,有时不是。当设置一个变量时,用户直接用名称而不需要加接用名称而不需要加$,但要获取变量的值就要在变量名前加,但要获取变量的值就要在变量名前加$:$echo$PATH$/usr/bin:/bin:/usr/local/bin:/usr/X11R6/bin否则命令行否则命令行$echoPATH的执行结果就是:的执行结果就是:$PATH。处理处理$PATH变量时,用户不能只替换变量,而要将新字符串添加到原来的值变量时,用户不能只替换变量,而要将新字符串添加到原来的值中。用户不能用中。用户不能用PATH=/some/directory,这将删除,这将删除$PATH中的其它所有中的其它所有目录。用户在该终端运行程序时,必须给出完整路径。所以只能添加:目录。用户在该终端运行程序时,必须给出完整路径。所以只能添加:PATH=$PATH:/some/directory当用户翻开新终端运行当用户翻开新终端运行echo$PATH时,返回的是旧时,返回的是旧$PATH值,看不到添加的值,看不到添加的新目录。因为用户定义的是局部环境变量。要定义全局变量,用户需要将新目录。因为用户定义的是局部环境变量。要定义全局变量,用户需要将局部变量输出局部变量输出export,用,用export命令:命令:exportPATH=$PATH:/some/directory现在翻开新终端,输入现在翻开新终端,输入echo$PATH,将能看到新设置的,将能看到新设置的$PATH。为了永久保。为了永久保存添加的路径,要将存添加的路径,要将export行添加到用户行添加到用户.bash_profile文件。文件。不要在不要在.bashrc中设置中设置PATH,以免,以免PATH目录意外增长。因为用户每翻开一目录意外增长。因为用户每翻开一个终端,目录都会被添加,从而导致个终端,目录都会被添加,从而导致PATH变量目录的屡次复制。变量目录的屡次复制。4历时记忆功能历时记忆功能bash命令的历史功能是把以往输入的命令记录下来,方便日后查询与再次使命令的历史功能是把以往输入的命令记录下来,方便日后查询与再次使用。只要按向上键就能调出历史命令。与用。只要按向上键就能调出历史命令。与SHIFT键连用,可遍历该控制台键连用,可遍历该控制台中的历史输出。历史命令的编辑修改通过光标和中的历史输出。历史命令的编辑修改通过光标和Home、End等键完成。等键完成。用户可以为环境变量用户可以为环境变量HISTFILE赋新值改变存放历史命令的文件,如:赋新值改变存放历史命令的文件,如:$HISTFILE=/home/mengqc/.myhistory4.3 shell基本命令Linux中的中的shell命令很多,第三章已进行了解析,这里把命令很多,第三章已进行了解析,这里把与编程有关的命令罗列出来,便于读者掌握。这些命令分与编程有关的命令罗列出来,便于读者掌握。这些命令分为内部命令和外部命令两类。为内部命令和外部命令两类。4.3.1内部命令内部命令shell内部命令是内部命令是shell本身具备的基本命令,执行速度比外本身具备的基本命令,执行速度比外部命令快,存放在内存中,在当前部命令快,存放在内存中,在当前shell中立即被执行,不中立即被执行,不必创立新进程。编写必创立新进程。编写shell程序时尽量使用内部命令,以提程序时尽量使用内部命令,以提高程序的执行效率。高程序的执行效率。不同不同shell的内部命令大同小异,差异在于命令名或语法,的内部命令大同小异,差异在于命令名或语法,用户只要熟悉一种用户只要熟悉一种shell就可以了。表就可以了。表4.2以以bash为例列出常为例列出常用的内部命令。用的内部命令。4.3.2 外部命令shell除去内部命令以外的命令被称为外部命令或程序。常用的有除去内部命令以外的命令被称为外部命令或程序。常用的有mv、ls、cp等。用户在执行外部命令时,等。用户在执行外部命令时,shell首先查询路径找到该命令,首先查询路径找到该命令,然后生成子然后生成子shell,由它解释执行这条命令。在命令执行过程中,原,由它解释执行这条命令。在命令执行过程中,原shell父父shell等待子等待子shell的执行而进入睡眠态,一旦子的执行而进入睡眠态,一旦子shell执行完执行完毕,子毕,子shell将唤醒原将唤醒原shell,而子,而子shell的生命周期到此结束。的生命周期到此结束。4.3.3命令分组命令分组在在shell中有两种命令分组的方法:中有两种命令分组的方法:“和和“。当。当shell执行执行中的命令时将再创立一个新的子进程,然后这个子进程执行圆括弧中的命令时将再创立一个新的子进程,然后这个子进程执行圆括弧中的命令。当用户在执行某个命令时,假设不想让命令运行对状态集中的命令。当用户在执行某个命令时,假设不想让命令运行对状态集合的改变,影响后面语句的执行时,就该把这些命令放在括弧中,这合的改变,影响后面语句的执行时,就该把这些命令放在括弧中,这样就能保证所有的改变只对子进程产生影响,而父进程不受干扰。样就能保证所有的改变只对子进程产生影响,而父进程不受干扰。用于将顺序执行的命令输出结果用于另一个命令的输入管道方式。用于将顺序执行的命令输出结果用于另一个命令的输入管道方式。当用户使用圆括弧和花括弧时,需要在其前面加上转义符、以便当用户使用圆括弧和花括弧时,需要在其前面加上转义符、以便shell知道他们不是用于命令执行的终止之用。知道他们不是用于命令执行的终止之用。4.3.4 函数bash函数的实质是命令集合或批处理文件。在函数的实质是命令集合或批处理文件。在shell中定义的函数都是由假设中定义的函数都是由假设干条干条shell命令组成的命令集合体,与命令组成的命令集合体,与shell程序形式相似,可看作一条复合命程序形式相似,可看作一条复合命令。不同之处在于它是多进程。函数定义的基本格式为:令。不同之处在于它是多进程。函数定义的基本格式为:function函数名函数名假设干命令行假设干命令行其中关键字其中关键字function可以缺省。调用函数的格式为:可以缺省。调用函数的格式为:函数名函数名参数参数1参数参数2.shell函数可以完成一些例行工作,可以有自己的退出状态,所以函数可以作函数可以完成一些例行工作,可以有自己的退出状态,所以函数可以作为为if、while等控制结构的条件。等控制结构的条件。在函数定义时一般不带参数,而在调用函数时带参数运行,在函数定义时一般不带参数,而在调用函数时带参数运行,shell此时把参数此时把参数分别赋予相应的位置参数分别赋予相应的位置参数$1、$2、.及及$*。函数的规则是先定义后使用。调用函数时直接利用函数名,不带圆括号,与函数的规则是先定义后使用。调用函数时直接利用函数名,不带圆括号,与一般命令同样使用。一般命令同样使用。shell脚本与函数间的参数传递可用位置参数和变量直接脚本与函数间的参数传递可用位置参数和变量直接传递。变量值可以由传递。变量值可以由shell脚本传递给被调用函数,而函数中所用的位置参数脚本传递给被调用函数,而函数中所用的位置参数$1、$2等对应于函数调用语句中的实参,这与普通命令不同。等对应于函数调用语句中的实参,这与普通命令不同。【例】4.2#funcisafunctionname#itechosthevaluesofvariablesandargumentsfuncechoLetsbeginnow.echo$a$b$cecho$1$2$3echoTheend.a=Workingdirectoryb=isc=pwdfuncWeleYouBybyechoTodayisdateshell中的函数把假设干命令集合在一起,通过函数名调用。如果需要还可被屡次中的函数把假设干命令集合在一起,通过函数名调用。如果需要还可被屡次调用。执行函数并不创立新的进程,是通过调用。执行函数并不创立新的进程,是通过shell进程执行的。通常函数的最后一进程执行的。通常函数的最后一个命令执行后就退出被调函数。可以用个命令执行后就退出被调函数。可以用return命令立即退出函数,其语法格式是:命令立即退出函数,其语法格式是:returnn其中的其中的n值是退出函数时的退出值退出状态,即值是退出函数时的退出值退出状态,即$?的值。当的值。当n值缺省时,则退值缺省时,则退出值是最后一个命令执行后的退回值。出值是最后一个命令执行后的退回值。【例】4.3 定义4个函数并实现其功能upper函数:将传递给它的文件中的字母转换成大函数:将传递给它的文件中的字母转换成大写写,并存放到同名的结尾为并存放到同名的结尾为.out的文件中。的文件中。lower函数:将传递给它的文件里的字母转换成小写,函数:将传递给它的文件里的字母转换成小写,并存放到同名的结尾为并存放到同名的结尾为.out的文件中。的文件中。print函数:输出传递给它的文件的内容。函数:输出传递给它的文件的内容。usage_error函数:输出程序的帮助信息。函数:输出程序的帮助信息。程序的主模块是程序的主模块是case条件语句,根据命令行中第一个参数条件语句,根据命令行中第一个参数决定程序完成什么功能,并调用相应函数完成这个功能。决定程序完成什么功能,并调用相应函数完成这个功能。4.3.5 shell的命令组合Linux系统可以把系统命令、应用程序和用户程序有机地组合起来完系统可以把系统命令、应用程序和用户程序有机地组合起来完成一系列任务。成一系列任务。shell通过管道、输入输出重定向以及程序设计的方法通过管道、输入输出重定向以及程序设计的方法来实现这一功能。通过这些方法,用户可以灵活高效地使用来实现这一功能。通过这些方法,用户可以灵活高效地使用shell控制控制linux系统的各种资源。系统的各种资源。管道是把一个应用程序的标准输出与另外一个应用程序的标准输入相管道是把一个应用程序的标准输出与另外一个应用程序的标准输入相连接的有效工具。管道的基本格式为:连接的有效工具。管道的基本格式为:应用程序应用程序管道操作符管道操作符应用程序应用程序管道操作符是一个代表管道的专用字符管道操作符是一个代表管道的专用字符“|。管道线是由管道操作。管道线是由管道操作符分隔的几个应用程序组成的序列。管道线实现了创立管道文件并重符分隔的几个应用程序组成的序列。管道线实现了创立管道文件并重定向输入输出的功能。管道重定向与定向输入输出的功能。管道重定向与I/O重定向不同,前者直接把一重定向不同,前者直接把一个程序的输出与另一个程序的输入相连,不创立任何中间文件。个程序的输出与另一个程序的输入相连,不创立任何中间文件。Linux系统的一串管道线是一个命令表,送回的值是该命令表中最后系统的一串管道线是一个命令表,送回的值是该命令表中最后一个管道线的出口状态。一个管道线的出口状态。命令表中分隔命令的符号有命令表中分隔命令的符号有“;或换行符。;或换行符。&表示条件为真表示条件为真true时执行其后面的管道线。时执行其后面的管道线。“|表示条件为假表示条件为假false时才执行后时才执行后面的管道线。面的管道线。&表示前面的管道线在后台执行。表示前面的管道线在后台执行。通过命令、管道线和命令表,用户可以完成各种从简单到复杂的任务。通过命令、管道线和命令表,用户可以完成各种从简单到复杂的任务。输入输出重定向主要有以下几种用法:输入输出重定向主要有以下几种用法:在标准管道重定向中,在标准管道重定向中,“为输出重定向,为输出重定向,“为追加输出重定向。如为追加输出重定向。如“应用程序应用程序2文件或文件或“应用程序应用程序2文件则将应用程序产生的写文件和标准错误输出的全部信息一起文件则将应用程序产生的写文件和标准错误输出的全部信息一起写入文件。使用写入文件。使用&进行标准输出的重定向。如:进行标准输出的重定向。如:“应用程序应用程序&2命令就是把应用程序的输出重定向到标准错误输出中。命令就是把应用程序的输出重定向到标准错误输出中。当系统执行当系统执行shell命令时,会自动翻开命令时,会自动翻开3个文件:标准输入文件描述个文件:标准输入文件描述字为字为0,标准输出文件描述字为,标准输出文件描述字为1,标准错误输出文件描述字,标准错误输出文件描述字为为2。系统初始化时,将这系统初始化时,将这3个文件连接到相应的终端,个文件连接到相应的终端,0对应键盘,对应键盘,1对应对应屏幕,屏幕,2对应屏幕。如果用户键入了一个命令,系统就会自动执行该对应屏幕。如果用户键入了一个命令,系统就会自动执行该命令,并将结果送到屏幕上。如果用户输入的是错误命令,系统会自命令,并将结果送到屏幕上。如果用户输入的是错误命令,系统会自动将出错信息送到标准错误输出即屏幕上。动将出错信息送到标准错误输出即屏幕上。4.3.6 shell特殊字符shell中的特殊字符,都有特定的含义,如通配符中的特殊字符,都有特定的含义,如通配符“*和和“?、管?、管道线道线“|、单引号和双引号等。在使用时应注意它们表示的意义和、单引号和双引号等。在使用时应注意它们表示的意义和作用范围。作用范围。1.一般通配符一般通配符通配符用于模式匹配,如文件名匹配、路径名搜索、字符串查找等。通配符用于模式匹配,如文件名匹配、路径名搜索、字符串查找等。常用的通配符有四种:常用的通配符有四种:“*匹配任意字符匹配任意字符0或屡次。如或屡次。如f*可以匹配以可以匹配以f开头的任意字符串。开头的任意字符串。“?匹配任意一个字符,如?匹配任意一个字符,如f?匹配匹配f1、fa等,但不匹配等,但不匹配f、fabc等。等。“匹配该字符组限定的任何一个字符。如匹配该字符组限定的任何一个字符。如fa-d与与fabcd作用相作用相同。同。“!表示不在一对方括号中列出的字符。如表示不在一对方括号中列出的字符。如f!1-9.c表示以表示以f开头,开头,后面一个字符不是数字后面一个字符不是数字1至至9的的.c文件名,它匹配文件名,它匹配fa.c、fb.c等。在一个等。在一个正则表达式中,可以同时使用正则表达式中,可以同时使用“*和和“?。?。2.模式表达式模式表达式模式表达式是包含一个或多个通配符的字符序列。其形式和含义如模式表达式是包含一个或多个通配符的字符序列。其形式和含义如下:下:*模式表模式表匹配给定模式表中匹配给定模式表中“模式的模式的0或屡次出现,各模式之或屡次出现,各模式之间以间以“|分开。例如,分开。例如,file*.c.o将匹配文件将匹配文件file、file.c、file.o、file.c.c、file.o.o、file.c.o、file.o.c等,但不匹配等,但不匹配file.h或或file.s等。等。+模式表模式表匹配给定模式表中匹配给定模式表中“模式的模式的1次或屡次出现,各模式次或屡次出现,各模式之间以之间以“|分开。例如,分开。例如,file+.c|.o匹配文件匹配文件file.c、file.c.o等,等,但不匹配但不匹配file。?模式表模式表匹配模式表中任何一种匹配模式表中任何一种“模式的模式的0或或1次出现,各模式次出现,各模式之间以之间以“|分开。例如分开。例如file?.c.o只匹配只匹配file、file.c和和file.o,不,不匹配匹配file.c.o等。等。模式表模式表仅匹配模式表中给定仅匹配模式表中给定“模式的一次出现。模式的一次出现。!模式表模式表除给定模式表中一个除给定模式表中一个“模式外,它可匹配其它任何东模式外,它可匹配其它任何东西。西。可以看出,模式表达式的定义是递归的,每个表达式中都可以包含可以看出,模式表达式的定义是递归的,每个表达式中都可以包含一个或多个模式。例如一个或多个模式。例如file*.cho.sh是合法的模式表达式。是合法的模式表达式。3.引引号号在在shell中引号分为三种:单引号、双引号和倒引号。中引号分为三种:单引号、双引号和倒引号。双引号中的字符,除双引号中的字符,除$、倒引号、倒引号和反斜线和反斜线仍保存其特殊功能外,其仍保存其特殊功能外,其余字符均作为普通字符对待。余字符均作为普通字符对待。“$表示变量替换,即用其后指定的变量表示变量替换,即用其后指定的变量的值来代替的值来代替$和变量;倒引号表示命令替换;仅当和变量;倒引号表示命令替换;仅当“后面的字符是下后面的字符是下述字符之一时,述字符之一时,“才是转义字符,这些字符是:才是转义字符,这些字符是:“$、“、“、“或换行符。转义字符告诉或换行符。转义字符告诉shell不对其后面的字符进行特殊处理,不对其后面的字符进行特殊处理,只当普通字符。如:只当普通字符。如:$echoMycurrentdirispwdandlognameis$LOGNAMEMycurrentdiris/home/mengqcandlognameismengqc单引号中的字符都作为普通字符出现。例如,单引号中的字符都作为普通字符出现。例如,$echoThetimeisdate,thefileis$HOME/abcThetimeisdate,thefileis$HOME/abc倒引号中的字符串被倒引号中的字符串被shell解释为命令行。执行时先执行该命令行,并以它的解释为命令行。执行时先执行该命令行,并以它的标准输出结果取代整个倒引号局部。在前面例如中已见过。例如,标准输出结果取代整个倒引号局部。在前面例如中已见过。例如,$echocurrentdirectoryispwdcurrentdirectoryis/home/mengqc注释:注释:shell程序中以程序中以“#开头的正文行都表示注释。注释行用来说明程序的开头的正文行都表示注释。注释行用来说明程序的功能、结构、算法和变量等,增加程序可读性。在执行时注释行被忽略。功能、结构、算法和变量等,增加程序可读性。在执行时注释行被忽略。4.4 shell变量shell用变量存放字符串,变量没有存储类型,使用时直接定义并赋值。用变量存放字符串,变量没有存储类型,使用时直接定义并赋值。shell有环境变量和临时变量之分。环境变量是永久性变量,其值不会随有环境变量和临时变量之分。环境变量是永久性变量,其值不会随shell脚本执行结束而消失。临时变量是在脚本执行结束而消失。临时变量是在shell程序内部定义的,使用范围程序内部定义的,使用范围仅限于程序内部,程序执行结束就随之消失了。仅限于程序内部,程序执行结束就随之消失了。Bash作为常用的作为常用的shell,其变量和,其变量和C变量有区别,值得注意的问题有:变量有区别,值得注意的问题有:Bash变量在引用时要在变量前加变量在引用时要在变量前加$符。第一次赋值及在符。第一次赋值及在for循环头部不用循环头部不用加加$符号;符号;Bash中没有浮点型变量,也没有浮点运算;中没有浮点型变量,也没有浮点运算;Bash整形变量的整形变量的算术运算要经过算术运算要经过let或或expr语句处理。在变量赋值时,语句处理。在变量赋值时,“=左右两边都不左右两边都不能有空格,能有空格,Bash语句的结尾不加分号语句的结尾不加分号;。在变量之间的比较操作上,整数变量和字符串变量各不相同。判断整数在变量之间的比较操作上,整数变量和字符串变量各不相同。判断整数a和和b是否相等就写做是否相等就写做if$a=$b,判断整数,判断整数a是否大于整数是否大于整数b就写做就写做if$a-gt$b。比较字符串。比较字符串a和和b是否相等就写作:是否相等就写作:if$a=$b,判断字符串,判断字符串a是是否为空就写作:否为空就写作:if-z$a。判断整数变量。判断整数变量a是否大于是否大于b就写作:就写作:if$a-gt$b。注意在。注意在“和和“符号的左右侧必须留有空格。如符号的左右侧必须留有空格。如if-x/root可用来判断当前用户是否可以进入可用来判断当前用户是否可以进入/root目录。目录。4.4.1 用户自定义变量变量和变量和shell是紧密相关的,是紧密相关的,bash有两个基本的系统配置文有两个基本的系统配置文件:件:/etc/bashrc和和/etc/profile。它们包含两组不同的变量:。它们包含两组不同的变量:shell变量和环境变量。前者只在特定变量和环境变量。前者只在特定shell中固定如中固定如bash,后者可在不同,后者可在不同shell中固定。显然,中固定。显然,shell变量是局部的,变量是局部的,而环境变量是全局的。环境变量通过而环境变量是全局的。环境变量通过shell命令设置,设置命令设置,设置好的环境变量又可以被所有当前用户运行的程序使用。对好的环境变量又可以被所有当前用户运行的程序使用。对于于bash可以通过变量名来访问相应的环境变量,通过可以通过变量名来访问相应的环境变量,通过export来设置环境变量。来设置环境变量。用户定义的变量是最普通的用户定义的变量是最普通的shell变量。变量名以字母或下变量。变量名以字母或下划线开头的字母、数字和下划线序列,且大小写字母意义划线开头的字母、数字和下划线序列,且大小写字母意义不同。如不同。如dir与与Dir是不同变量。这与是不同变量。这与C语言中标识符的定语言中标识符的定义相同。变量名的长度不受限制。定义变量并赋值的一般义相同。变量名的长度不受限制。定义变量并赋值的一般形式是:变量名形式是:变量名=字符串字符串例如:例如:myfile=/usr/meng/ff/m1.c变量值的改变,只须利用赋值语句重新赋值。未赋值的变量仅含一个变量值的改变,只须利用赋值语句重新赋值。未赋值的变量仅含一个空串。在程序中使用变量值,要在变量名前面加上一个符号空串。在程序中使用变量值,要在变量名前面加上一个符号“$。例如例如,$dir=/usr/meng/ff则命令行则命令行$echo$dir的显示结果为:的显示结果为:/usr/meng/ff如果在赋值变量中包含空格、制表符或换行符,那么就应该用双引号如果在赋值变量中包含空格、制表符或换行符,那么就应该用双引号把这个字符串括起来。例如把这个字符串括起来。例如:names=ZhangsanLisiWangwu可以将一个命令的执行结果赋值给变量。有两种替换方式:使用倒引可以将一个命令的执行结果赋值给变量。有两种替换方式:使用倒引号或小括号引用命令。例如:将当前工作目录的全路径名存放到变量号或小括号引用命令。例如:将当前工作目录的全路径名存放到变量dir中,可以输入以下命令行:中,可以输入以下命令行:$dir=pwd或或$dir=$pwd一个变量可以是字符串,或再定义为整数。如果对该变量进行整数运一个变量可以是字符串,或再定义为整数。如果对该变量进行整数运算,就可以被解释为整数;如果进行字符串操作,它就被看作为字符算,就可以被解释为整数;如果进行字符串操作,它就被看作为字符串。串。【例】4.4 关键字let的应用#!/bin/bashx=2006letx=$x+1echo$xx=astring.echo$x关于整数变量计算,有如下几种:关于整数变量计算,有如下几种:+-*/%,它们的意思和字面意,它们的意思和字面意思相同,在思相同,在*和和/之前必须冠以反斜线,以免被之前必须冠以反斜线,以免被SHELL先行解释。整数先行解释。整数运算一般通过运算一般通过let和和expr指令来实现,如对变量指令来实现,如对变量x加加1可以写作:可以写作:letx=$x+1或者或者x=expr$x+1。$#传入脚本的命令行参数个数;传入脚本的命令行参数个数;$*所有命令行参数值,在各个参数值之间留有空格;所有命令行参数值,在各个参数值之间留有空格;为了使某个变量存在于一个局部程序块中,引入了局部变量的概念。为了使某个变量存在于一个局部

    注意事项

    本文([精选]Shell基础与编程技术讲义.ppt)为本站会员(lil****205)主动上传,淘文阁 - 分享文档赚钱的网站仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知淘文阁 - 分享文档赚钱的网站(点击联系客服),我们立即给予删除!

    温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




    关于淘文阁 - 版权申诉 - 用户使用规则 - 积分规则 - 联系我们

    本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知淘文阁网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

    工信部备案号:黑ICP备15003705号 © 2020-2023 www.taowenge.com 淘文阁 

    收起
    展开