2022年Linux的shell编程 .pdf
《2022年Linux的shell编程 .pdf》由会员分享,可在线阅读,更多相关《2022年Linux的shell编程 .pdf(11页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、Shell 本身是一个用C 语言编写的程序,它是用户使用Linux的桥梁。 Shell既是一种命令语言,又是一种程序设计语言。作为命令语言,它交互式地解释和执行用户输入的命令;作为程序设计语言,它定义了各种变量和参数,并提供了许多在高级语言中才具有的控制结构,包括循环和分支。它虽然不是Linux系统核心的一部分,但它调用了系统核心的大部分功能来执行程序、建立文件并以并行的方式协调各个程序的运行。因此,对于用户来说,shell 是最重要的实用程序,深入了解和熟练掌握shell的特性极其使用方法,是用好 Linux系统的关键。可以说,shell使用的熟练程度反映了用户对Linux使用的熟练程度。一
2、、什么是 shell 当一个用户登录Linux系统之后,系统初始化程序init 就为每一个用户运行一个称为shell( 外壳 )的程序。那么,shell是什么呢?确切一点说,shell就是一个命令行解释器,它为用户提供了一个向Linux内核发送请求以便运行程序的界面系统级程序,用户可以用shell 来启动、挂起、停止甚至是编写一些程序。当用户使用Linux时是通过命令来完成所需工作的。一个命令就是用户和shell 之间对话的一个基本单位,它是由多个字符组成并以换行结束的字符串。shell 解释用户输入的命令, 就象 DOS 里的 所做的一样,所不同的是,在DOS 中,只有一个,而在Linux下
3、比较流行的shell有好几个,每个 shell都各有千秋。一般的Linux系统都将 bash 作为默认的shell 。二、几种流行的shell 目前流行的 shell有 ash 、bash 、ksh 、csh 、zsh 等,你可以用下面的命令来查看你自己的shell类型:#echo $SHELL $SHELL 是一个环境变量,它记录用户所使用的shell类型。你可以用命令:#shell-name 来转换到别的shell ,这里 shell-name是你想要尝试使用的shell 的名称,如ash 等。这个命令为用户又启动了一个shell ,这个 shell 在最初登录的那个shell 之后,称为
4、下级的shell 或子 shell 。使用命令:$exit 可以退出这个子shell 。使用不同的 shell的原因在于它们各自都有自己的特点,下面作一个简单的介绍:1.ash ash shell是由 Kenneth Almquist编写的, Linux中占用系统资源最少的一个小shell ,它只包含24 个内部命令,因而使用起来很不方便。2.bash 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 1 页,共 11 页 - - - - - - - - - bash 是 Linux系
5、统默认使用的shell , 它由 Brian Fox和 Chet Ramey共同完成,是 Bourne Again Shell的缩写,内部命令一共有40 个。 Linux使用它作为默认的shell 是因为它有诸如以下的特色:(1) 可以使用类似DOS 下面的 doskey的功能,用方向键查阅和快速输入并修改命令。(2) 自动通过查找匹配的方式给出以某字符串开头的命令。(3) 包含了自身的帮助功能,你只要在提示符下面键入help 就可以得到相关的帮助。3.ksh ksh 是 Korn shell的缩写,由Eric Gisin编写,共有42 条内部命令。该shell 最大的优点是几乎和商业发行版的
6、 ksh 完全兼容,这样就可以在不用花钱购买商业版本的情况下尝试商业版本的性能了。4.csh csh 是 Linux比较大的内核,它由以William Joy为代表的共计47 位作者编成,共有52 个内部命令。该 shell其实是指向 /bin/tcsh这样的一个shell ,也就是说, csh 其实就是 tcsh 。5.zch zch 是 Linux最大的 shell 之一,由 Paul Falstad完成,共有84 个内部命令。如果只是一般的用途,是没有必要安装这样的shell的。3. shell程序设计 (基础部分 ) 其实作为命令语言交互式地解释和执行用户输入的命令只是shell功能的
7、一个方面, shell 还可以用来进行程序设计, 它提供了定义变量和参数的手段以及丰富的程序控制结构。使用 shell 编程类似于 DOS 中的批处理文件,称为shell script,又叫 shell 程序或 shell 命令文件。1.shell基本语法shell 的基本语法主要就是如何输入命令运行程序以及如何在程序之间通过shell 的一些参数提供便利手段来进行通讯。(1) 输入输出重定向在 Linux中,每一个进程都有三个特殊的文件描述指针:标准输入 (standard input, 文件描述指针为0) 、标准输出 (standard output,文件描述指针为1) 、标准错误输出 (
8、standard error,文件描述指针为2) 。这三个特殊的文件描述指针使进程在一般情况下接收标准输入终端的输入,同时由标准终端来显示输出,Linux同时也向使用者提供可以使用普通的文件或管道来取代这些标准输入输出设备。在shell 中,使用者可以利用 “” 和“file:将命令的输出结果重定向到一个文件。名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 2 页,共 11 页 - - - - - - - - - command&file:将命令的标准错误输出一起重定向到一个文件。c
9、ommandfile:将标准输出的结果追加到文件中。command&file:将标准输出和标准错误输出的结构都追加到文件中。command (2) 管道 pipe pipe同样可以在标准输入输出和标准错误输出间做代替工作,这样一来,可以将某一个程序的输出送到另一个程序的输入,其语法如下:command1| command2| command3. 也可以连同标准错误输出一起送入管道:command1| &command2|& command3. (3) 前台和后台在 shell下面,一个新产生的进程可以通过用命令后面的符号“ ; ” 和“& ” 来分别以前台和后台的方式来执行,语法如下:comm
10、and 产生一个前台的进程,下一个命令须等该命令运行结束后才能输入。command & 产生一个后台的进程,此进程在后台运行的同时,可以输入其他的命令。2。shell 程序的变量和参数像高级程序设计语言一样,shell 也提供说明和使用变量的功能。对shell来讲,所有变量的取值都是一个字符串, shell 程序采用 $var的形式来引用名为var 的变量的值。Shell 有以下几种基本类型的变量:(1)shell定义的环境变量shell 在开始执行时就已经定义了一些和系统的工作环境有关的变量,这些变量用户还可以重新定义,常用的 shell环境变量有:名师资料总结 - - -精品资料欢迎下载
11、- - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 3 页,共 11 页 - - - - - - - - - HOME :用于保存注册目录的完全路径名。PATH :用于保存用冒号分隔的目录路径名,shell将按 PATH 变量中给出的顺序搜索这些目录,找到的第一个与命令名称一致的可执行文件将被执行。TERM :终端的类型。UID :当前用户的标识符,取值是由数字构成的字符串。PWD :当前工作目录的绝对路径名,该变量的取值随cd 命令的使用而变化。PS1:主提示符,在特权用户下,缺省的主提示符是“ #”,在普通用户下,缺省的主提
12、示符是“ $”。PS2:在 shell 接收用户输入命令的过程中,如果用户在输入行的末尾输入“” 然后回车,或者当用户按回车键时 shell判断出用户输入的命令没有结束时,显示这个辅助提示符,提示用户继续输入命令的其余部分,缺省的辅助提示符是“” 。(2) 用户定义的变量用户可以按照下面的语法规则定义自己的变量:变量名 = 变量值要注意的一点是,在定义变量时,变量名前不应加符号“$”,在引用变量的内容时则应在变量名前加“$” ;在给变量赋值时,等号两边一定不能留空格,若变量中本身就包含了空格,则整个字符串都要用双引号括起来。在编写 shell程序时,为了使变量名和命令名相区别,建议所有的变量名
13、都用大写字母来表示。有时我们想要在说明一个变量并对它设定为一个特定值后就不在改变它的值,这可以用下面的命令来保证一个变量的只读性:readly 变量名在任何时候, 建立的变量都只是当前shell的局部变量, 所以不能被shell 运行的其他命令或shell 程序所利用, export命令可以将一局部变量提供给shell 执行的其他命令使用,其格式为:export 变量名也可以在给变量赋值的同时使用export命令:export 变量名 = 变量值名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - -
14、 - 第 4 页,共 11 页 - - - - - - - - - 使用 export说明的变量,在shell 以后运行的所有命令或程序中都可以访问到。(3) 位置参数位置参数是一种在调用shell 程序的命令行中按照各自的位置决定的变量,是在程序名之后输入的参数。位置参数之间用空格分隔,shell取第一个位置参数替换程序文件中的$1 ,第二个替换 $2 ,依次类推。 $0是一个特殊的变量,它的内容是当前这个shell程序的文件名,所以,$0 不是一个位置参数,在显示当前所有的位置参数时是不包括$0 的。(4) 预定义变量预定义变量和环境变量相类似,也是在shell 一开始时就定义了的变量,所
15、不同的是,用户只能根据shell的定义来使用这些变量,而不能重定义它。所有预定义变量都是由$符和另一个符号组成的,常用的shell预定义变量有:$# :位置参数的数量$* :所有位置参数的内容$?:命令执行后返回的状态$ :当前进程的进程号$! :后台运行的最后一个进程号$0 :当前执行的进程名其中, “$?” 用于检查上一个命令执行是否正确(在 Linux中,命令退出状态为0 表示该命令正确执行,任何非 0 值表示命令出错) 。“ $”变量最常见的用途是用作临时文件的名字以保证临时文件不会重复。(5) 参数置换的变量shell 提供了参数置换能力以便用户可以根据不同的条件来给变量赋不同的值。
16、参数置换的变量有四种,这些变量通常与某一个位置参数相联系,根据指定的位置参数是否已经设置类决定变量的取值,它们的语法和功能分别如下。a. 变量 =$参数 -word:如果设置了参数,则用参数的值置换变量的值,否则用word置换。即这种变量的值等于某一个参数的值,如果该参数没有设置,则变量就等于word的值。b. 变量 =$参数 =word:如果设置了参数,则用参数的值置换变量的值,否则把变量设置成word然后再用 word替换参数的值。注意,位置参数不能用于这种方式,因为在shell 程序中不能为位置参数赋值。名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - -
17、 - - - - - - - 名师精心整理 - - - - - - - 第 5 页,共 11 页 - - - - - - - - - c. 变量 =$参数? word:如果设置了参数,则用参数的值置换变量的值,否则就显示word并从 shell中退出,如果省略了word ,则显示标准信息。这种变量要求一定等于某一个参数的值,如果该参数没有设置,就显示一个信息,然后退出,因此这种方式常用于出错指示。d. 变量 =$参数 +word:如果设置了参数,则用word置换变量,否则不进行置换。所有这四种形式中的“ 参数 ” 既可以是位置参数,也可以是另一个变量,只是用位置参数的情况比较多。四、 shel
18、l 程序设计的流程控制和其他高级程序设计语言一样,shell 提供了用来控制程序执行流程的命令,包括条件分支和循环结构,用户可以用这些命令建立非常复杂的程序。与传统的语言不同的是,shell 用于指定条件值的不是布尔表达式而是命令和字符串。1.test测试命令test 命令用于检查某个条件是否成立,它可以进行数值、字符和文件三个方面的测试,其测试符和相应的功能分别如下:(1) 数值测试:-eq :等于则为真-ne :不等于则为真-gt :大于则为真-ge :大于等于则为真-lt :小于则为真-le :小于等于则为真(2) 字符串测试:= :等于则为真!= :不相等则为真-z 字符串:字符串长度
19、伪则为真-n 字符串:字符串长度不伪则为真(3) 文件测试:-e 文件名:如果文件存在则为真-r 文件名:如果文件存在且可读则为真-w 文件名:如果文件存在且可写则为真-x 文件名:如果文件存在且可执行则为真-s 文件名:如果文件存在且至少有一个字符则为真-d 文件名:如果文件存在且为目录则为真-f 文件名:如果文件存在且为普通文件则为真-c 文件名:如果文件存在且为字符型特殊文件则为真-b 文件名:如果文件存在且为块特殊文件则为真另外, Linux还提供了与 (“ !”) 、或 (“ -o) 、非 (“ -a”) 三个逻辑操作符用于将测试条件连接起来,其优先级为: “ !” 最高, “ -a
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 2022年Linux的shell编程 2022 Linux shell 编程
限制150内