您好,欢迎访问三七文档
当前位置:首页 > 电子/通信 > 综合/其它 > 第九章_Linux Shell编程
第九章LinuxShell编程Linux-system09第九章LinuxShell编程9.1Linuxshell9.2Bashshell9.3SHELL变量9.4SHELL函数9.5SHELL编程9.1Linuxshell•Linux只是一个内核,发行版是在内核基础上添加了一些应用程序库和应用软件,shell是一个命令解析器,它能够将用户输入的命令解析为内核能够了解的指令,并且将命令传递给内核由内核来负责将指令发送给硬件,后由硬件执行相关的动作,shell为我们提供一个人机交互的界面。Shell内核用户输入命令:如ls、cd、make……9.1Linuxshellshell的作用:shell遵循一定的语法,将输入的命令加以解释后传给系统,shell为用户提供一个向系统发送请求以便运行程序界面的接口,用户可以用shell来编写一些程序或者脚本。Shell是用C语言编写的程序,它是用户和linux沟通的桥梁.shell是一种命令语言,又是一种程序设计语言.1、作为命令语言,提供用户和SHELL的交互。2、作为程序设计语言,提供各种变量和参数,并提供了在高级语言中才具有的结构控制,包括循环和分支。shell虽然不是linux系统的一部分,但它调用了系统核心的大部分功能来执行程序.9.1Linuxshellshell的种类:ash,bash,ksh,csh,zshash是由KennethAlmquist编写的,是Linux中占用系统资源最少的一个小Shell,它只包含24个内部命令,因而使用起来很不方便ksh是Kornshell的缩写,由EricGisin编写,共有42条内部命令csh是Linux比较大的内核,它由以WilliamJoy为代表的共计47位作者编成,共有52个内部命令。该Shell其实是指向/bin/tcsh的,也就是说,csh其实就是tcshzsh是Linux最大的Shell之一,由PaulFalstad完成,共有84个内部命令。如果只是一般的用途,是没有必要安装这样的Shell的。9.1Linuxshellbash是BourneAgainShell的缩写也是linux系统默认使用的shell,由BrianFox和ChetRamey共同完成.提供40个内部命令.是sh的一个改进版本,兼容所有sh下运行的脚本,还从ksh中合并了许多特性也将csh中的一些特性吸收到了bash中,这也意味着在csh和ksh上编写的脚本一样能在bash环境下很好的运行.bash主要有以下特色:(1)可以使用类似DOS下面doskey的功能,用上下方向键查阅和快速输入并修改命令。(2)自动通过查找匹配的方式,给出以某字串开头的命令。(3)包含了自身的帮助功能,你只要在提示符下面键入help就可以得到相关的帮助。9.2BashshellLinux上最流行的就是Bashshell,这也是我们要课程中学习的shell。有三种类型的shell:1、loginshell2、normalshell3、interactiveshellBash配置文件包括:(依据你的linux发行版)/etc/profile/etc/bashrc~/.bash~/.profile每一个shell环境,其设置可以用set-o来查看9.2Bashshell9.3SHELL变量通配符:用于文件名匹配,路径匹配,字串查找等单个字符:lslf?显示所有以f开头后有单个字符的文件,如fg。范围中的字符:lslf[a-g]显示以f开头后包含a-g任意字符的,文件如fa,fb等。任意字符:lslf*显示以f开头后任意字符的文件,如fg,fhh,free。变量:利用=来赋值,在等号两边不要是用空格。例如:[root@localhost/]#ht=hongtu9.3SHELL变量引号:在shell中引号分为三种:单引号,双引号,反引号单引号括起来的字符都作为普通字符出现。特殊字符如果用单引号括起来以后,会失去原有的特殊含义,只做普通字符解释。1、定义一个变量:ht=hongtu显示变量ht:echo$ht屏幕上会显示hongtu2、如果加上单引号:echo'$ht'屏幕上只会显示$ht而不会再显示hongtu了。9.3SHELL变量双引号:由双引号括起来的字符,除$、\、'和这几个特殊字符仍是特殊字符以外其它字符都当做普通字符对待。echo'$ht'显示$ht如果用echo“$ht”便会显示hongtu\在shell的作用是转义字符反引号:被反引号括起来的字串被shell认为是命令行,在执行时shell首先执行该命令行,并以它的标准输出取代反引号。当执行pwd命令时,显示路径:/home/dgtraing/abc定义变量string=”yourpathis`pwd`”echo$string屏幕上显示:yourpathis/home/ht/abc9.3SHELL变量练习:hi=hello!Ilovelinux!lcd=`cathi`lin=linuxwor=worldlinux=`echo$lcd$lin$wor'echo'$lcd$lin$wor'echo“$hi”说说2个echo分别显示什么内容9.3Shell变量重定向:linux的shell功能非常多,其中有一个功能就是让用户把几个不同的程序”胶合”到一起,通常用户会碰到想把一个程序的输出保存到一个文件,或者将一个程序的输出结果给另外一个程序.这个时候就可以使用shell的重定向功能。#date星期三1月1514:33:02GMT+82010#datetoday.txt屏幕上什么也没有显示,执行date命令的结果跑那去了呢,赶快去当前目录的today.txt中看看吧!哇塞!!!结果原来在这里啊!神奇!!!9.3Shell变量重定向刚才的示例中所用到的符号就是重定向的符号在使用重定向的时候需要注意一点,前面的示例中的today.txt文件如果不存在将会自动创建,如果today.txt存在,重定向会把原today.txt里的内容全部删除后重新建立一个today.txt文件,如果想把重定向的信息保存到today.txt中又不想删除原先文件中的内容需要使用追加重定向#cattoday.txt星期三12月1514:33:02GMT+82010#datetoday.txt#cattoday.txt自己看一看结果吧!!!9.3Shell变量标准输入输出:前面说了重定向,下面来看这么一个示例:mkdirht/hello/linux/log.txt这时屏幕上会提示'无法创建目录,没有这个文件或目录'这里有个问题,既然已经重定向输出到log.txt里为什么还会出现提示呢?在linux中,每个程序都拥有三种定义的读或写的方法:1、标准输入stdin:读取用户从键盘输入的信息2、标准输出stdout:把信息显示到用户屏幕上3、标准错误stderr:把信息输出到用户屏幕上9.3Shell变量标准输入输出:前面的示例只是将标准输出做了重定向,而没有对标准错误进行重定向,所以才会在屏幕上出现程序错误的信息,如何对错误输出进行重定向呢?在刚才的前边加上2,试试看:mkdirht/hello/linux/2log.txt怎么屏幕上刚才的显示都没有了呢?原来错误信息已经被重定向到log.txt文件中了。0stdinput1stdoutput2stderror除了2以外还可以用&来代替2mkdirht/hello/linux/&log.txt9.3Shell变量标准输入输出:前面都提到了标准输出和标准错误的重定向,接着来看一下标准输入的重定向.tac是一个简单的程序,它从键盘上读取输入信息,然后再将输入的信息颠倒后输出,下面来对输入重定向.先viht.txt文件,内容为1.ubuntu2.redhat3.slackware4.openBSD执行tacht.txt将tac输入重定向为ht.txt文件9.3Shell变量管道:是shell中最重要的功能之一,管道的作用就是将一个程序的输出,传输给另一个程序作为另一个程序的输入,这就叫做管道.管道的运算符是|(基本上和\是同一个键)ls-lh--sort=size|tacls-lh–sort=size命令的结果是将当前目录里的文件以大到小排列,然后显示出来后送进了管道|而不是屏幕,管道将先前ls命令得到的结果传给了tac命令,tac命令将输入的内容颠倒一下,用户在屏幕上看到的结果是当前目录下的文件,从小到的顺序显示了出来。9.3Shell变量管道:它的作用远不止这些,管道可以在一条命令里多次使用例如:catht.txt|tac|grepm显示ht.txt里的内容输出给了tactac将输入的内容颠倒给grepgrep将含有m的内容过滤出来思考:catht.txt|hi.txt是否可以,为什么?9.3Shell变量重定向:shell中有一个tee命令,tee命令的作用是读入标准输入的内容,然后将标准输入的内容发送到标准输出和文件.命令格式tee[选项][文件名]-a追加到文件末尾catht.txt|tac|tee-aa.txtcat读取ht.txt文件给tac颠倒输出后给tee,tee会将tac程序的结果显示在屏幕上,并把显示在屏幕上的内容追加到a.txt文件末尾9.3Shell变量•别名:平时在使用shell的时候,可能经常会碰到需要使用某个很长的命令或者某个命令的多个参数很多次.为了节约用户的时间,bash提供了一种叫'别名'的机制,让用户可以通过命令来定义快捷键.例如在平时的工作中经常需要用到ls-lh这条命令aliasdir='ls-lh'这样就把ls-lh这条命令的快捷键定义为dir如果需要执行ls-lh只要使用dir,就相当在使用ls-lh命令了。9.3Shell变量别名:1、如何查看系统上已定义好的别名呢?命令:alias就能显示系统上定义的别名。2、如何取消一个已经定义好的别名呢?命令:unalias别名例如:定义别名ll,只显示隐藏目录:$aliasll='ls-d.*/--color=tty'需要取消已经定义的ll执行:unaliasll这样定义的别名就取消了9.3Shell变量•命令替换和重定向有些相似,但区别在于命令替换是将一个命令的输出作为另一个程序的参数.命令替换的格式为:命令1`命令2`这里命令2的结果将作为命令1的参数例如aa.txt文件里的内容为/usr/bincd`cataa.txt`首先cataa.txt显示目录/usr/bin作为参数传递给了cd。相当于执行了cd/usr/bin切换到了/usr/bin目录下9.3Shell变量•变量:shell在开始执行时就已定义了一些和系统有关系的环境变量,这些变量一般都是为大写.HOME用户保存注册目录的完全路径名PATH用于路径名TERM终端类型UID当前用户在系统中的识别号PWD当前工作目录的绝对路径名还有很多很多就不一一列举了。如果想查看某个变量名的值可以用echo$变量9.3Shell变量•变量:如何查看系统中的环境变量呢?执行命令:env显示的内容,是系统启动时已定义好的环境变量。set命令是用来查看shell变量的命令export命令是用来修改当前环境变量的命令命令格式为export(原)变量名=(新)变量值例如:exportLANG=cexportLANGUAGE=c设定语言环境变量为英文9.3Shell变量定义变量时需要注意的几点1.系统变量一般都是大写2.用户自定义变量一般为小写3.可以用任何数字,任何字母及下划线的组合.但首字符必需是下划线或字母取消一个已经设定的变量用unset命令#unsetlinux9.3Shell变量变量:PS变量是属于shell变量里的执行:set|grepPS1显示:PS1='[\u@\h\W]\$'这个PS1变量就是定义在bash中显示的提示符。例如当登录到系统的bash以后看到的[ht@hongtu-laptop:~]$这就是通过PS1变量来定义。下面是bash在P
本文标题:第九章_Linux Shell编程
链接地址:https://www.777doc.com/doc-6427905 .html