您好,欢迎访问三七文档
第11章bash使用详解shell概念Linux下用户shell的指定bash的使用bash的常见技巧与快捷键bash的变量使用常见的bash变量使用bash运算符定制bash11-1Shell概念Shell的概念Shell的功能Shell是系统的用户界面,提供了用户与系统内核进行交互的一种接口(命令解释器)x-window。Shell接收用户输入的命令并把它送入内核去执行。Shell起着协调用户和系统的一致性和在用户与系统之间进行交互的作用。通过Shell,可以启动、挂起、停止和编写程序。各种操作系统都有自己的Shell,Windows2000/XP/2003/Vista中的Shell是cmd.exe,UNIX/Linux中主要有两大类Shell,BourneShell(包括sh、ksh、Bash等)和CShell(包括csh、tcsh等),大多数的Linux都以Bash做为默认的Shell,当运行Shell时,其实调用的是Bash。Shell具有下面的功能。命令行解释使用保留字使用Shell元字符(通配符)可处理程序命令使用输入输出重定向和管道维护一些变量运行环境控制$HOME/.bashrc支持Shell编程11-2bash的使用什么是bashbash命令概要bash特性11-2-1什么是bashbash是英文GNUBourne-AgainShell的缩写,bash是GNU组织开发和推广的一个项目,不过也有一种风趣的说法认为bash=Born-AgainShell。BourneShell的作者是StevenBourne,它是UNIX最初使用的Shell并且在每种UNIX上都可以使用,而bash与BourneShell完全向后兼容,是BourneShell的扩展。bash是Linux操作系统上的一个Shell,是由/bin/bash解释执行的。bash支持IEEEPOSIXP1003.2/ISO9945.2脚本语言工具标准。11-2-2为什么要学习bash为什么要学习bash?因为bash是每个Linux发行版都带有的一个标准基础软件,所以学会在bash下编制一些小程序,可以让你对Linux系统的管理应付自如;其次bash非常简单,如果不深究bash语法中的细节的话,你可以用1个小时就学会它,应该说bash比HTML要更容易学;最后,即使你不打算用bash编程,但是Linux系统中的许多配置文件和脚本都是bash的语法,不懂一点bash的知识就不能很好的理解和使用Linux。其实最简单的bash就和DOS下的批处理文件类似,只要把要执行的命令一行一行写出来即可。11-2-3bash命令概要bash命令解释程序包含了一些内部命令。内部命令在目录列表时是看不见的,它们由Shell本身提供。常用的内部命令如表11-1所示。表11-1常用的bash内部命令表命令说明alias设置Bash别名bg使一个被挂起的进程在后台继续执行。cd改变当前工作目录exit终止Shellexport使变量的值对当前Shell的所有子进程都可见fc用来编辑历史命令列表里的命今fg使一个被挂起的进程在前台继续执行help显示bash内部命令的帮助信息kill终止某个进捏pwd显示当前工作目录unalias删除已定义的别名trap脚本中捕获信号:trapfuncsignal(s)eval扫描文本并执行11-2-4bash特性bash的主要特性有下面几个。1.命令补齐(目录、文件名补齐)通常你在bash(或任何其他的Shell)下输入命令时你不必把命令输全Shell就能判断出你所要输入的命令。当你输入命令时不论何时按下Tab键,bash都将尽其所能地试图补齐命令,不行的话会发出蜂鸣来提醒你需要更多的信息。你需要键入更多的字符,并再次按下Tab键,重复这个过程直至你期望的命令出现。2.通配符Linux支持在查找文件和字符时使用通配符。Bash支持三种通配符:通配符“*”表示任意和所有的字符,可表示任何的字符序列。如:[root@localhost~]#cp*/tmp//拷贝当前目录下的所有不是以“.”开头的文件到/tmp目录通配符“?”代表一个字符。如当前目录下有文件file1.doc、file2.doc、file1c.doc、file2s.doc和file2q.doc,执行如下命令将拷贝file1.docfile2.doc文件到/tmp目录。[root@localhost~]#cpfile?.doc/tmp通配符[…],如用户想选择文件file1.doc,file2.doc和file3.doc,但不选file4.doc,可用file[123]作为文件的通配符。还可以在[]中括入一个字符范围来代表一个字符。假设有名为redflag.1,redflag.2,redflag.3和redflag.4的四个文件,把前三个文件移动到/tmp下,可用:[root@localhost~]#mvredflag.[1-3]/tmp注意:与“?”一样,在[]中的一项代表一个字符,如[123],只允许代表字符1、2、3,如[1-5]表示在数字1到5的任意字符;[A-Z,a-z]代表在ASCII字符集中,26个大小写字符。3.命今历史记录bash支持历史命令(history),它可以保留一定数量的、曾使用过的Shell命令。便于重复执行同一组命令。例如,在开发程序和查错时,将重复进行相同的循环。编辑源程序、编译源程序、运行可执行文件来测试它的性能,然后在从头开始。为了避免重复输入同样的命令,Bash在执行命令时将它们保存起来,需要时可重复使用这些命令。Bash用命令历史表(historylist)保存这些命令。历史表一般可保留1000行命令。每次当用户退出系统时,Bash自动将当前历史表保存到一个文件中。默认的文件用户主目录下的$HOME/.bash_history,下一次登录时,Bash自动将历史文件的内容加载到的命令历史表中。4.提示符bash有两级用户提示符。第一级是你经常看到的bash在等待命令输入时的提示符。缺省的一级提示符是字符$(如果是超级用户,则是#号)。在bash下,可以通过更改PS1环境变量的值来设置提示行,如下所示:实例11-1:修改提示符[root@localhost~]#exportPS1=[root@localhost~]#exportPS1=ThisismysuperpromptThisismysuperprompt更改会立即生效,通过将exportPS1=定义放在您的$HOME/.bashrc文件中可将这种更改固定下来。只要您愿意,PS1可以包含任意数量的纯文本。如实例11-1所示。尽管这很有趣,但在提示行中包含大量静态文本并不是特别有用。大多数定制的提示行包含诸如用户名、工作目录或主机名之类的信息。这些信息可以帮助您在Shell世界中遨游。例如,下面的提示行将显示您的用户名和主机名。实例11-2:修改提示符,显示用户的名字和主机名[root@localhost~]#exportPS1=\u@\H//\u表示用户名字,\H表示主机名字drobbins@freebox这个提示行对于那些以多个不同名称的帐户登录多台机器的人尤为有用,因为它可以提醒您:您目前在哪台机器上操作,拥有什么权限。在上面的示例中,我们使用了反斜杠转义的字符序列,以此通知bash将用户名和主机名插入提示行中,当这些转义字符序列出现在PS1变量中时,bash就会用特定的值替换它们。我们使用了序列\u(表示用户名)和\H(表示主机名的第一部分)。表11-2提示符特殊字符代码字符含义\!显示该命令的历史记录编号\#显示当前命令的命令编号\$显示$符作为提示符,如果用户是root的话,则显示#号\\显示反斜杠\d显示当前日期\h显示主机名\n打印新行\nnn显示nnn的八进制值\s显示当前运行的Shell的名字\t显示当前时间\u显示当前用户的用户名\W显示当前工作目录的名字\w显示当前工作目录的路径11-3bash的常见技巧与快捷键bash的命令历史bash快捷键11-3-1查询命令的历史大部分Shell中都包括一个强大的history命令历史记录机制。它容许用户重新调用和重复过去的命今,也可以在执行之前编辑它们。history命令会列出已经保存的命今,每个命令都有一个标识号。bash也支持命令历史记录。这意味着bash保留了一定数目的你先前已经在Shell里输入过的命令。这个数目取决于一个叫做HISTSIZE的变量。有关HISTSIZE的更多信息,请看本文后面的“bash变量”一节。bash把你先前输入的命令文本保存在一个历史列表中。当你以你的帐号登录系统后历史列表将根据一个历史文件被初始化。历史文件的文件名被一个叫HISTFILE的bash变量指定。历史文件的缺省名字是.bash_history。这个文件通常在你的用户目录($HOME)中。注意:该文件的文件名以一个句号开头,这意味着它是隐含的,仅当你带-a或-A参数的ls命令列目录时才可见。仅将先前的命令存在历史文件里是没有用的,所以bash提供了几种方法来调用它们。使用历史记录列表最简单的方法是用上方向键。按下上方向键后最后键入的命令将出现在命令行上。再按一下则倒数第二条命令会出现,以此类推。如果上翻多了的话也可以用向下的方向键来下翻。(和DOS实用程序doskey一样)如果需要的话,显示在命令行上的历史命令可以被编辑。最简单的调用历史命令的方法是是使用上下箭头键,逐个列出使用过的命令。用向上箭头键会使最新敲入的命令现示在命令行上;再次使用就可以得到次新的命令,以此类推。向下箭头键反之。使用历史文件的方法是用history命令,history命令有两种使用方法。第一种是使用命令:[root@localhost~]#history[n]如果history命令后不带任何参数,那么整个历史表的内容都会现示在屏幕上。在history命令后跟上参数n使历史表中最后n条命令被显示出来。History的第二种使用方法是使用下面的格式改变历史文件或历史表的内容:[root@localhost~]#history[-r|w|a|n][filename]命令中的选项含义为:-r是告诉history命令读取历史文件的内容,并把它们作为当前的历史表。-w是告诉history命令把当前历史表写入历史文件(覆盖当前历史文件)。-a参数则把当前历史表添加到历史文件的尾部。-n参数把历史文件中的最后n行读取到当前历史表中。History命令的这些参数的执行结果都会被送入其后的[filename]文件中,并把该文件作为历史文件。Shell变量HISTFILE表示要把历史命令记录在哪个文件当中,Shell变量HISTSIZE当前历史命令允许的个数。另外,可以使用fc命令编辑已有的历史命令,该命令会自动打开vi编辑器,用户修改号命令后,保存退出时即可执行新修改的命令了。11-3-2bash的快捷键bash常用的快捷键如表11-3所示。通过这些快捷键,你可以熟练的使用Bash。表11-3Bash下常用的快捷键表快捷键说明Tab自动补完命令行与文件名Tab键双击可以列出所有匹配的选择Ctrl+c结束当前的任务Ctrl+z当然任务暂停,并放在后台Ctrl+s停止屏幕输出Ctrl+q恢复屏幕输出Ctrl+l清屏Ctrl+d标准输入结束11-4bash的变量使用bash的变量类型分类bash的预定义环境变量11-4-1bash的变量类型分类bash的变量分为环境变量和普通变量,环境变量是可以被子Shell引用的变量,普通变量只在当前Shell中有效。对于变量,用户可按如下方式赋值:name=value在引用变量时,需在前面加$符号,用户也可以在变量间进行相互赋值。实例11-3:bash变量的使用[root@localhost~]#JOHN=john[root@localhost~]#N
本文标题:shell编程入门
链接地址:https://www.777doc.com/doc-5281737 .html