⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 00000003.htm

📁 一份很好的linux入门资料
💻 HTM
📖 第 1 页 / 共 4 页
字号:
X产品好一些,因为有近乎无穷多的shell和相关的自动化工具可用。不过,我想无论如&nbsp;<BR>何,你都必须了解bash,这是Linux的缺省shell。&nbsp;<BR>&nbsp;&nbsp;&nbsp;<BR>&nbsp;&nbsp;2.3.1&nbsp;命令解释程序&nbsp;<BR>&nbsp;&nbsp;&nbsp;<BR>&nbsp;&nbsp;一个复杂的可以编程的命令解释程序是UNIX的特色之一,它们通常被称为shell。由于&nbsp;<BR>shell仅仅是一些标准的UNIX程序,因此它可以毫无困难地在Linux上实现。当然一般人&nbsp;<BR>总是喜欢使用较为好用的shell程序。&nbsp;<BR>&nbsp;&nbsp;&nbsp;<BR>&nbsp;&nbsp;Linux下用的最多的shell是bash,它很庞大也很复杂,但是确实功能强大。对于许多&nbsp;<BR>用户来说,bash的命令行接口已经足够好,例如提供了在命令行编辑历史纪录的功能。&nbsp;<BR>事实上,shell的用法可以用一本书来描述,因为shell命令本身构成了一种语言,具有&nbsp;<BR>不逊于一般语言的编程能力。&nbsp;<BR>&nbsp;&nbsp;&nbsp;<BR>&nbsp;&nbsp;本书作者不奢望你是一个shell&nbsp;script专家,也无意让你成为一个shell专家,但是为&nbsp;<BR>了对系统进行有效的管理,至少必须能够看懂shell脚本。如果你已经熟悉shell编程就&nbsp;<BR>可以简单地跳过这一小节,否则,这里给出了对shell语法的一些简单描述。&nbsp;<BR>&nbsp;&nbsp;&nbsp;<BR>&nbsp;&nbsp;一个shell脚本通常就是一个文本文件,但是被设置成具有可执行的属性。你可以合情&nbsp;<BR>合理的把它看成一个批处理命令,然而,shell允许使用变量和流程控制,因此它能完成&nbsp;<BR>的东西比DOS的批命令要丰富的多。&nbsp;<BR>&nbsp;&nbsp;&nbsp;<BR>&nbsp;&nbsp;在shell脚本里面可以简单地定义变量,变量可以是一个数值或者字符串,shell并不&nbsp;<BR>了解变量类型的概念,区分变量类型的工作要你自己完成。&nbsp;<BR>&nbsp;&nbsp;&nbsp;<BR>&nbsp;&nbsp;为了定义变量,可以简单地使用赋值语句,例如,下面的命令将my_var的内容置为1:&nbsp;<BR>&nbsp;&nbsp;&nbsp;<BR>&nbsp;&nbsp;[wanghy@openlab&nbsp;wanghy]$&nbsp;my_var=1&nbsp;<BR>&nbsp;&nbsp;&nbsp;<BR>&nbsp;&nbsp;注意[wanghy@openlab&nbsp;wanghy]$是系统提示符。后面的才是输入内容。在使用bash时&nbsp;<BR>有一个特殊要求,即等号两边不能有空格。&nbsp;<BR>&nbsp;&nbsp;&nbsp;<BR>&nbsp;&nbsp;如果要访问变量的内容,使用$前缀,例如:&nbsp;<BR>&nbsp;&nbsp;&nbsp;<BR>&nbsp;&nbsp;[wanghy@openlab&nbsp;wanghy]$&nbsp;echo&nbsp;$my_var&nbsp;<BR>&nbsp;&nbsp;&nbsp;<BR>&nbsp;&nbsp;1&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<BR>&nbsp;&nbsp;&nbsp;<BR>&nbsp;&nbsp;另外,Linux定义了一些特殊的变量,首先是命令行参数,这些参数被用$0,$1,…的方&nbsp;<BR>式引用,$#则指代命令行参数的个数,$*则给出全部参数构成的字符串。如果这些说法&nbsp;<BR>让你感到困难,看一下下面脚本的运行结果。&nbsp;<BR>&nbsp;&nbsp;&nbsp;<BR>&nbsp;&nbsp;[wanghy@openlab&nbsp;wanghy]$&nbsp;cat&nbsp;testpar&nbsp;<BR>&nbsp;&nbsp;&nbsp;<BR>&nbsp;&nbsp;echo&nbsp;$0&nbsp;<BR>&nbsp;&nbsp;&nbsp;<BR>&nbsp;&nbsp;echo&nbsp;$1&nbsp;<BR>&nbsp;&nbsp;&nbsp;<BR>&nbsp;&nbsp;echo&nbsp;$2&nbsp;<BR>&nbsp;&nbsp;&nbsp;<BR>&nbsp;&nbsp;echo&nbsp;$*&nbsp;<BR>&nbsp;&nbsp;&nbsp;<BR>&nbsp;&nbsp;[wanghy@openlab&nbsp;wanghy]$&nbsp;./testpar&nbsp;par1&nbsp;par2&nbsp;par3&nbsp;<BR>&nbsp;&nbsp;&nbsp;<BR>&nbsp;&nbsp;./testpar&nbsp;<BR>&nbsp;&nbsp;&nbsp;<BR>&nbsp;&nbsp;par1&nbsp;<BR>&nbsp;&nbsp;&nbsp;<BR>&nbsp;&nbsp;par2&nbsp;<BR>&nbsp;&nbsp;&nbsp;<BR>&nbsp;&nbsp;par1&nbsp;par2&nbsp;par3&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<BR>&nbsp;&nbsp;&nbsp;<BR>&nbsp;&nbsp;shell中定义了一些特殊的字符,除了$指代变量,&lt;,&gt;,&lt;&lt;,&gt;&gt;,|进行标准I/O重定向之外&nbsp;<BR>,还有下面一些字符:&nbsp;<BR>&nbsp;&nbsp;&nbsp;<BR>&nbsp;&nbsp;`&nbsp;&nbsp;这个符号(就是在Tab和Esc之间的那个键)用于执行命令替换,例如出于某种原因&nbsp;<BR>你想执行uname&nbsp;–r命令得到内核的版本号并且存入$kernel_version里,可以执行下面&nbsp;<BR>的程序代码:&nbsp;<BR>&nbsp;&nbsp;&nbsp;<BR>&nbsp;&nbsp;kernel_version=`uname&nbsp;-r`&nbsp;<BR>&nbsp;&nbsp;&nbsp;<BR>&nbsp;&nbsp;双引号和单引号用于标记字符串,但是它们也有一些不同,主要是如果有一个字符串&nbsp;<BR>中包含$var这样看起来象是变量名的部分时,双引号括起来的字符串将其解释为变量而&nbsp;<BR>单引号不作任何处理。&nbsp;<BR>&nbsp;&nbsp;&nbsp;<BR>&nbsp;&nbsp;反斜杠用于在字符串中包含特殊字符。&nbsp;<BR>&nbsp;&nbsp;&nbsp;<BR>&nbsp;&nbsp;.&nbsp;号用于执行一个脚本,例如:.&nbsp;./testpar执行当前目录下的testpar脚本。它不能&nbsp;<BR>用于执行二进制文件。&nbsp;<BR>&nbsp;&nbsp;&nbsp;<BR>&nbsp;&nbsp;Bash的另外一个功能是执行各种程序流程,它支持if….then….else…..fi的选择模&nbsp;<BR>式,其中if后跟各种测试指令,测试指令的基本形式是test&nbsp;表达式,如test&nbsp;1&lt;2,tes&nbsp;<BR>t&nbsp;–f&nbsp;/etc/smb.conf等等。test也可以用方括号代替,例如test&nbsp;1&lt;2&nbsp;和[&nbsp;1&nbsp;&lt;&nbsp;2&nbsp;]等价&nbsp;<BR>,注意使用方括号时方括号和中间的表达式之间必须用空格隔开。可以选择的测试指令&nbsp;<BR>包括:&nbsp;<BR>&nbsp;&nbsp;&nbsp;<BR>&nbsp;&nbsp;数字比较&nbsp;<BR>&nbsp;&nbsp;&nbsp;<BR>&nbsp;&nbsp;-eq&nbsp;(等于)&nbsp;-ge&nbsp;(大于等于)-le(小于等于)-ne(不等于)-gt&nbsp;(大于)-lt(小&nbsp;<BR>于)&nbsp;<BR>&nbsp;&nbsp;&nbsp;<BR>&nbsp;&nbsp;字符串比较&nbsp;&nbsp;<BR>&nbsp;&nbsp;&nbsp;<BR>&nbsp;&nbsp;=&nbsp;等于&nbsp;!=&nbsp;不等于&nbsp;–n&nbsp;字符串长度是否大于零&nbsp;–z&nbsp;字符串长度是否等于零&nbsp;<BR>&nbsp;&nbsp;&nbsp;<BR>&nbsp;&nbsp;文件测试&nbsp;<BR>&nbsp;&nbsp;&nbsp;<BR>&nbsp;&nbsp;-d&nbsp;是否为目录&nbsp;<BR>&nbsp;&nbsp;&nbsp;<BR>&nbsp;&nbsp;-f&nbsp;是否存在这个文件&nbsp;<BR>&nbsp;&nbsp;&nbsp;<BR>&nbsp;&nbsp;-r&nbsp;是否可读&nbsp;<BR>&nbsp;&nbsp;&nbsp;<BR>&nbsp;&nbsp;-s&nbsp;是否具有大于零的长度&nbsp;<BR>&nbsp;&nbsp;&nbsp;<BR>&nbsp;&nbsp;-w&nbsp;是否可写&nbsp;<BR>&nbsp;&nbsp;&nbsp;<BR>&nbsp;&nbsp;-x&nbsp;是否可执行&nbsp;<BR>&nbsp;&nbsp;&nbsp;<BR>&nbsp;&nbsp;逻辑操作&nbsp;<BR>&nbsp;&nbsp;&nbsp;<BR>&nbsp;&nbsp;!&nbsp;求逻辑非&nbsp;<BR>&nbsp;&nbsp;&nbsp;<BR>&nbsp;&nbsp;-a&nbsp;逻辑AND&nbsp;<BR>&nbsp;&nbsp;&nbsp;<BR>&nbsp;&nbsp;-o&nbsp;逻辑OR&nbsp;<BR>&nbsp;&nbsp;&nbsp;<BR>&nbsp;&nbsp;另外,shell支持for,while,until和case,shift语句。if,while,case和until语&nbsp;<BR>句的用法都很简单,只要看一下系统给的例子就可以了,for语句比较复杂,其格式是&nbsp;<BR>&nbsp;&nbsp;&nbsp;<BR>&nbsp;&nbsp;for&nbsp;var&nbsp;in&nbsp;list&nbsp;<BR>&nbsp;&nbsp;&nbsp;<BR>&nbsp;&nbsp;do&nbsp;<BR>&nbsp;&nbsp;&nbsp;<BR>&nbsp;&nbsp;&nbsp;…..&nbsp;<BR>&nbsp;&nbsp;&nbsp;<BR>&nbsp;&nbsp;&nbsp;done&nbsp;<BR>&nbsp;&nbsp;&nbsp;<BR>&nbsp;&nbsp;其含义是对list中的每个值执行一次循环。如果list写成”$@”则对所有命令行参数&nbsp;<BR>执行一次循环。&nbsp;<BR>&nbsp;&nbsp;&nbsp;<BR>&nbsp;&nbsp;下面是case的基本用法:&nbsp;<BR>&nbsp;&nbsp;&nbsp;<BR>&nbsp;&nbsp;case&nbsp;str&nbsp;in&nbsp;&nbsp;<BR>&nbsp;&nbsp;&nbsp;<BR>&nbsp;&nbsp;str1|str2)&nbsp;<BR>&nbsp;&nbsp;&nbsp;<BR>&nbsp;&nbsp;statement1;&nbsp;<BR>&nbsp;&nbsp;&nbsp;<BR>&nbsp;&nbsp;str3|str4)&nbsp;<BR>&nbsp;&nbsp;&nbsp;<BR>&nbsp;&nbsp;&nbsp;statement2;&nbsp;<BR>&nbsp;&nbsp;&nbsp;<BR>&nbsp;&nbsp;str5)&nbsp;<BR>&nbsp;&nbsp;&nbsp;<BR>&nbsp;&nbsp;&nbsp;statement3;&nbsp;<BR>&nbsp;&nbsp;&nbsp;<BR>&nbsp;&nbsp;*);&nbsp;<BR>&nbsp;&nbsp;&nbsp;<BR>&nbsp;&nbsp;esac&nbsp;<BR>&nbsp;<BR>&nbsp;&nbsp;&nbsp;<BR>&nbsp;&nbsp;*相当于&quot;case&nbsp;else&quot;。str1|str2)表示“若等于str1或者str2则”&nbsp;,小括号是不可少&nbsp;<BR>的。&nbsp;<BR>&nbsp;&nbsp;&nbsp;<BR>&nbsp;&nbsp;while语句的用法是&nbsp;<BR>&nbsp;&nbsp;&nbsp;<BR>&nbsp;&nbsp;while&nbsp;&nbsp;&nbsp;{&nbsp;expression&nbsp;}&nbsp;<BR>&nbsp;&nbsp;&nbsp;<BR>&nbsp;&nbsp;do&nbsp;&nbsp;<BR>&nbsp;&nbsp;&nbsp;<BR>&nbsp;&nbsp;.....&nbsp;<BR>&nbsp;&nbsp;&nbsp;<BR>&nbsp;&nbsp;......&nbsp;<BR>&nbsp;&nbsp;&nbsp;<BR>&nbsp;&nbsp;done&nbsp;<BR>&nbsp;&nbsp;&nbsp;<BR>&nbsp;&nbsp;until语句的用法是&nbsp;<BR>&nbsp;&nbsp;&nbsp;<BR>&nbsp;&nbsp;until&nbsp;test&nbsp;expression&nbsp;<BR>&nbsp;&nbsp;&nbsp;<BR>&nbsp;&nbsp;do&nbsp;<BR>&nbsp;&nbsp;&nbsp;<BR>&nbsp;&nbsp;.......&nbsp;<BR>&nbsp;&nbsp;&nbsp;<BR>&nbsp;&nbsp;......&nbsp;<BR>&nbsp;&nbsp;&nbsp;<BR>&nbsp;&nbsp;done&nbsp;&nbsp;<BR>&nbsp;&nbsp;&nbsp;<BR>&nbsp;&nbsp;shift语句与dos里的用法相同,它把命令行参数的位置左移,缺省的情况下移动一次&nbsp;<BR>。&nbsp;<BR>&nbsp;&nbsp;&nbsp;<BR>&nbsp;&nbsp;另外的标准语句还有break和exit,分别用于退出一个循环或者退出当前脚本。&nbsp;<BR>&nbsp;&nbsp;&nbsp;<BR>&nbsp;&nbsp;还有一个语句是select,用来接受用户输入,其用法可以参考下面的脚本:&nbsp;<BR>&nbsp;&nbsp;&nbsp;<BR>&nbsp;&nbsp;select&nbsp;input&nbsp;in&nbsp;continue&nbsp;over&nbsp;<BR>&nbsp;&nbsp;&nbsp;<BR>&nbsp;&nbsp;do&nbsp;<BR>&nbsp;&nbsp;&nbsp;<BR>&nbsp;&nbsp;if&nbsp;test&nbsp;$input&nbsp;=&nbsp;&quot;continue&quot;&nbsp;;&nbsp;then&nbsp;<BR>&nbsp;&nbsp;&nbsp;<BR>&nbsp;&nbsp;echo&nbsp;&quot;contiune&quot;&nbsp;<BR>&nbsp;&nbsp;&nbsp;<BR>&nbsp;&nbsp;else&nbsp;<BR>&nbsp;&nbsp;&nbsp;<BR>&nbsp;&nbsp;echo&nbsp;&quot;over&quot;&nbsp;<BR>&nbsp;&nbsp;&nbsp;<BR>&nbsp;&nbsp;exit&nbsp;<BR>&nbsp;&nbsp;&nbsp;<BR>&nbsp;&nbsp;fi&nbsp;<BR>&nbsp;&nbsp;&nbsp;<BR>&nbsp;&nbsp;done&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<BR>&nbsp;&nbsp;&nbsp;<BR>&nbsp;&nbsp;[由于本书仅仅希望你能够看懂script而不是会编写复杂的script,因此不准备详细地&nbsp;<BR>叙述shell编程的要点。当然许多人把会熟练地编写script看成一个UNIX高级用户的标志&nbsp;<BR>,但是对于Linux系统管理员来说,高超的脚本技能绝对不是必要的。]&nbsp;<BR>&nbsp;&nbsp;&nbsp;<BR>&nbsp;&nbsp;2.3.2&nbsp;不同的shell&nbsp;<BR>&nbsp;&nbsp;&nbsp;<BR>&nbsp;&nbsp;对于大部分人来说,UNIX提供的shell是太多了,最常用的大概是sh,csh和bash程序&nbsp;<BR>,但是其他的象tcsh,zsh之类的程序也经常出现,如果有兴趣,你可以看看在Linux发&nbsp;<BR>行盘里面提供了多少种不同的shell。问题在于,不同的shell不仅是外貌不同,在流程&nbsp;<BR>控制和表达式的使用方面也存在区别,事实上,这样的问题经常让人晕头转向。&nbsp;<BR>&nbsp;&nbsp;&nbsp;<BR>&nbsp;&nbsp;&nbsp;在Linux的启动阶段,它使用sh作为命令解释器,其语法就是我们刚才讨论的语法,&nbsp;<BR>但是不支持bash提供的一些高级特性。事实上,bash是作为对sh程序的一种强化出现的&nbsp;<BR>。当Linux准备就绪以后,它使用/etc/passwd文件中的描述为每个用户提供自己的shel&nbsp;<BR>l,通常提供的是bash或者csh。这些shell都是用户友好的,提供了诸如命令行补齐,历&nbsp;<BR>史纪录,通配符等等高级特性。不过,许多人都喜欢使用自己习惯的shell程序。&nbsp;<BR>&nbsp;&nbsp;&nbsp;<BR>&nbsp;&nbsp;&nbsp;对shell掌握程度曾经是UNIX用户水平的衡量标志之一,因为那个时候除了shell以外&nbsp;<BR>

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -