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