UnixShell编程简介

上传人:宝路 文档编号:17053462 上传时间:2017-11-09 格式:DOC 页数:21 大小:140.97KB
返回 下载 相关 举报
UnixShell编程简介_第1页
第1页 / 共21页
UnixShell编程简介_第2页
第2页 / 共21页
UnixShell编程简介_第3页
第3页 / 共21页
UnixShell编程简介_第4页
第4页 / 共21页
UnixShell编程简介_第5页
第5页 / 共21页
点击查看更多>>
资源描述

《UnixShell编程简介》由会员分享,可在线阅读,更多相关《UnixShell编程简介(21页珍藏版)》请在金锄头文库上搜索。

1、Unix Shell 编程简介第一节 简介1.1 什么是 SHELLSHELL 常被看作 UNIX 系统的命令解释器,对于熟悉 Windows 用户,UNIX SHELL 类似于 DOS Shell,COMMAND.COM.Unix Shell 不仅仅是一个命令解释器,还是一个强大的编程语言,有着完整的条件语句 循环和函数.1.2 SHELL 的类型在 UNIX 中主要有两种主要类型的 SHELL:* Bourne Shell(包括 sh、ksh、 bash)* C Shell(包括 csh 和 tcsh)Bourne 类型的 Shell 的,缺省的提示符是 $,如果是 C 类型的 SHELL

2、, 缺省的提示符是%.不同类型的 Bourne Shell 如下:*Bourne Shell(sh)*Korn Shell(ksh)*Bourne Again Shell(bash)*POSLX Shell不同类型的 C Shell 如下:*C Shell(csh)*TENEX/TOPS C Shell(tcsh)1.2.1 Bourne Shell70 年代中期由 Stephen R.Bourne 在 AT&T 贝尔实验室编写使用 . Bourne Shell 在多数 UNIX 版本中通常被安装在/bin/sh 下.三个主要缺点1、没有文件名完整功能2、没有命令历史或命令编辑3、很难执行多个

3、后台进程或任务1.2.2 C ShellC Shell 在 80 年代由 Bill Toy 在加州大学伯克利分校开发 .C Shell 在多数UNIX 版本中通常被安装在/bin/csh 下.缺点:输入输出控制比较弱缺少函数语法不清晰,比较混乱优点命令历史(Command History).用户可以重复执行以前执行过的命令,在重新执行前还可以编辑命令.别名(alias) 可以为一条命令创建一个短的别名.文件名完整(file Name Completion) 只输入文件的几个字符让 C Shell 自动完整文件名.任务控制(Job Controls),可以用 job 命令执行多个进程并控制 .1

4、.2.3 TENEX/TOPS C Shell(tcsh) 是 CShell 的一个新版本,可以用向上向下的方向键浏览历史命令,用左右方向键来编辑命令.1.2.4Korn Shell(ksh)Ksh 与 sh 完全兼容,增加一些额外特征命令历史和历史替换命令别名和函数文件名完整数组变量内置整数运算1.2.5 Bourne Again Shell(bash)Bourne Again Shell(bash)是作为 GUN 的一部分开发的,也已经在 linux这样的系统中取代了 sh,包含了 C Shell Korn Shell 特征,保留了与 sh 语法兼容,几乎可以运行所有的 Bourne Sh

5、ell 脚本.注:以下解释如果没有特别指出,都是基于 Bourne Shell 脚本一个简单的 shell Scrip 文件1 #! /bin/sh2 echo “please input the number of loop:”3 read num4 while $num lt 10 5 do 6 echo $num7 num=echo :$num_1”|bc8 done解释#! /bin/sh1. 如果 Script 的第一个非空白字符不是#,则它会使用 Bourne Shell。2. 如果 Script 的第一个非空白字符是#时,但不以#!开头时,则它会使用 C Shell。3. 如果

6、Script 以#!开头,则#!後面所写的就是所使用的 Shell,而且要将整个路径名称指出来。建议使用第三种方式指定 Shell ,以确保所执行的就是所要的。Bourne Shell 的路径名称为/bin/sh ,而 C Shell 则为/bin/csh。#! /bin/sh 必须位于脚本的第一行。以使用 shell 来运行脚本,如果在其他行中出现,所以 shell 都会把当作注释而忽略掉,在 shell 脚本中,注释以#开头,在#到行尾的所有的都被认为是注释。例如1. 使用 Bourne Shellscript 文件开头为echo enter filename or #!/bin/sh2.

7、 使用 C Shellscript 文件开头为# C Shell Script or #!/bin/csh3 使用 perl script 文件开头为#! /usr/bin/perl除了在 Script 内指定所使用的 Shell 外,你也可以在命令列中强制指定。比如你要用 C Shell 执行某个 Script,你可以下这个命令:csh filename此时的 Script 的存取权就不一定要为可执行档,其内部所指定的 Shell 也会无效read numnum 变量,后面有关于变量的解释while $num lt 10 do echo $numnum=echo :$num_1”|bcdon

8、e循环语句。后面有关的解释Script 是以行为单位,我们所写的 Script 会被分解成一行一行来执行。而每一行可以是命令、注解、或是流程控制指令等。如果某一行尚未完成,可以在行末加上 ,这个时候下一行的内容就会接到这一行的後面,成为同一行,如下echo The message is too long so we have to split it into several lines 当 Script 中出现# 时,再它後面的同一行文字即为注解,Shell 不会对其翻译。 在 Script 中要执行一个命令的方法和在命令列中一样,你可以前景或背景执行,执行命令时也会需要设定一些环境变数在 B

9、ourne Shell 中有五种方法执行一个命令,而这五种方式所产生的果有些许的不同。1. 直接执行命令这个方式和在命令列中直接下命令的效果一样。2. 使用 sh 命令sh command这个 command 必须是 Bourne Shell 的 Script,但这个 command并不一定要设成可执行,除此之外和直接下命令的方式一样。 3. 使用.命令. command这时和使用 sh 命令相似,只不过它不像 sh 一般会产生新的process ,相反地,它会在原有的 process 下完成工作。4. 使用 exec 命令exec command此时这个 Script 将会被所执行的命令所取

10、代。当这个命令执行完毕之後,这个 Script 也会随之结束。5. 使用命令替换这是一个相当有用的方法。如果想要使某个命令的输出成为另一个命令的参数时,就一定要使用这个方法。我们将命令列於两个 号之间,而 Shell 会以这个命令执行後的输出结果代替这个命令以及两个 符号。str=Current directory is pwdecho $str结果如下:Current directory is /users/cc/mgtsai这个意思是 pwd 这个命令输出/users/cc/mgtsai,而後整个字串代替原来的pwd 设定 str 变数,所以 str 变数的内容则会有 pwd 命令的输出。

11、number=expr $number + 1expr 命令只将运算式解,而後输出到标准输出上。如果要将某变数设定成其值,非得靠命令替换的方式不可。这个例子是将number 变数的值加 1 後再存回 number 变数。C SHELL 中执行命令基本上和 Bourne Shell 相同,只有一点在 Bourne Shell 中的. 命令在C Shell 中则为source命令第二节 变量一般变量21 变量定义变量定义的方法:name=value这种变量称为标量(scalar variable),标量一次只能存储一个值。在 k shell 中可以使用数组变量,可以存储多个值。2.2 变量名规定:

12、只能包含字母(a-z 或 A-Z)数字(0-9)或者下划线(_),变量名只能一字母或者下划线开头。例如下面的变量是有效的:_RUITFruit_BasketTwo_tine_2以数字开头的变量名如 1、 2、 将保留给 Shell 使用,用户可以使用存储在这些变量中的值,但不能自己设置。在变量中不能使用 ! * - 等字符。Shell 对这些字符有特殊的意义。变量值:可以使用变量存储任何值,但要注意一点,在使用带空格的值时,要用引号,例如FRUIT=”apple orange plum”FRUIT=apple orange plum2.3 变量的访问值:访问存储在变量中的值,在变量前加上$符号

13、。例如:echo FRUIT显示:FRUITecho $ FRUIT显示:apple orange plum系统变量(环境变量)2.4 和一般变量相似,只不过此种变数会将其值传给其所执行的命令。要将一般变量设定为系统变数,只要加上:export var或者var=valueexport var系统默认的系统变量$HOME 使用者自己的目录$PATH 执行命令时所搜寻的目录$TZ 时区$MAILCHECK 每隔多少秒检查是否有新的信件$PS1 在命令列时的提示号$PS2 当命令尚未打完时,Shell 要求再输入时的提示号$MANPATH man 指令的搜寻路径只读变量2.5 和一般变量相似,只不

14、过这些变量不能被改变。要将一般变量设成只读的 ,只要加上:readonly var而若只打 readonly 则会列出所有只读变量。还有一点,系统变数不可以设定成只读的。例如name=Tom readonly name echo $name name=John readonly 结果如下:Tom (执行 echo $name 的结果)name: is read only (执行 name=John 的结果)readonly name (执行 readonly 的结果)C SHELL 中的变量定义1. 字串变量这个部分和 Bourne Shell 的变量一样,只不过在设定变量值时不能使用 Bou

15、rne Shell 的方式,而必须打:set var=value2. 数字运算基本上 C Shell 没有数字变量,但 C Shell 却有简单的方法处理数字运算:var operator expressionoperator 可以是 C 语言中的=, +=, -=,.,而 expression则是运算式。运算式的运算子如下:A. ( ) 改变计算的顺序B. 位元 NOT 运算! 逻辑否定C. % 取馀数/ 除* 乘- 减+ 加D. 右移大於= 大於等於 count = count + 1flag = -e /users/cc/mgtsai/mail & -e /usr/spool/mail3. 阵列在 C Shell 中,我们可以定义阵列变量,方式如下set var=(val1 val2 .)而 var1之值为 val1,var2之值为 val2.。而$var 代表整个阵列。可以用$#var 来计算阵列个数,也可以用$?var 来检查某个变量是否已定义。第三节 流控制命令在 shell 脚本中执行的顺序成为脚本流(flow)

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 行业资料 > 其它行业文档

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号