最新unix培训教材-SHELL编程.doc
《最新unix培训教材-SHELL编程.doc》由会员分享,可在线阅读,更多相关《最新unix培训教材-SHELL编程.doc(103页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、Four short words sum up what has lifted most successful individuals above the crowd: a little bit more.-author-dateunix培训教材-SHELL编程第一章UNIX培训教材-SHELL编程(内部使用)恒 生 在 您 身 边 杭州恒生电子股份有限公司第一章 概述shell是一个命令解释器,它会解释你在命令提示符下输入的命令。但是,你可能有一组想要多次执行的命令。shell提供了一种功能,让你将这组命令存放在一个文件中,然后你可以象UNIX系统提供的其他程序一样执行这个文件。这个命令文件
2、就叫做shell程序或者shell脚本。当你运行这个文件,它会象你在命令行输入这些命令一样地执行这些命令。shell 程序设计语言支持在高级语言里所能见到的绝大多数程序控制结构,比如循环,函数,变量和数组。shell 编程语言很易学,并且一旦掌握后它将成为你的得力工具。任何在提示符下能键入的命令也能放到一个可执行的shell程序里,这意味着用shell语言能简单地重复执行某一任务。l shell的种类在UNIX系统里可以使用多种不同的shell可以使用。最常用的几种是 Bourne shell (sh), C shell (csh), 和 Korn shell (ksh)。三种shell 都有
3、它们的优点和缺点。Bourne shell 的作者是 Steven Bourne。它是 UNIX 最初使用的shell 并且在每种 UNIX 上都可以使用。本书将以Bourne shell为基础来介绍shell编程知识。l shell程序中的注释推荐在shell程序中提供注释语句来注明程序的内容。注释由一个#符号开始。shell不会去执行任何在#之后的语句。#能够出现在命令行的任何位置。l shell程序的执行执行一个shell程序的一种方法是:sh shell_program arguments这种方式激活一个子shell并且指定这个子shell为执行这个程序的命令解释器。这个程序文件不是必
4、须为可执行的。也可以在shell程序的第一行前加入#!/usr/bin/ shell_name来指定命令行解释器。因此,如果你当前正在Bourne shell下工作,但是想要执行一个C shell的脚本,你的C shell程序的第一行应该为:!/usr/bin/csh此时shell脚本的许可权限必须被设置为可读和可执行。为了让shell可以找到程序,可以选择输入shell脚本的完全路径名,或者将这个脚本的路径放在于PATH环境变量指定的路径列表中。许多的用户会在他们的HOME目录下创建一个bin目录来存放他们自己开发的script,然后将$HOME/bin加入到他们的PATH环境变量中。第二章
5、 变量l 变量的定义及类型shell变量是弱变量,即该变量不需定义就能使用。shell变量都是字符串变量。其中数字字符串有双重特性,即是字符串又是整型数据。当数字字符串变量进行运算时,取其整数部分进行运算,且其符号保留。而且只有数字字符串变量才能进行+-运算。variable表示的仅是变量(如同C语言中的指针变量),$variable表示的是变量的值(如同指针变量前加*),在使用shell命令时,应注意需要的是变量,还是变量的值。l 系统缺省的变量位置参数变量位置参数:$0 表示命令本身;$1 表示第一个参数;$2 表示第二个参数;以此类推到$9,共十个。进程变量$#表示传递给shell命令文
6、件的参数个数(不包括命令文件名本身) 例: $ test a b c $ echo $# $ 3$?表示执行命令的退出状态,其值为0,1等。正常退出为0,异常退出为非0$变量的值为当前进程的进程号$*该变量的值为命令行的所有变元$!在后台运行的最后一个进程的进程号$-变量的值为shell中当前设置的各执行标志之名称组成的串l 标准shell变量ENV保存用来初启新shell的文件名FCEDIT保存fc命令的默认的编辑器名字HOME保存当前用户的主目录LINENO保存当前脚本或函数的当前序列行号,在脚本和函数的上下文以外其值没有意义MAIL保存shell查看新邮件的文件名MAILCHECK保存两
7、次信箱查看之间的秒数OLDPWD保存先前由cd命令设置的工作目录OPTARG保存getopts命令最近处理的可选参数的值PATH保存命令搜索路径PPID父进程的ID号PS1Shell的主提示符PS2Shell的次提示符PS3保存select命令的提示符PWD当前工作目录RANDOM每次它使用时都保存一个随机数SECONDS保存当前shell实例被启动以来经历的时间,如给SECONDS赋值,则SECONDS为赋的值加经历的时间TMOUT显示主提示符之后等待输入的秒数,如在指定时间没输入,则shell终止 l 变量的作用空间在shell脚本中定义的变量仅在脚本中有效,但使用如下的一些命令可以改变其
8、作用域或属性:export option name=value-表明选项结束,所有后续参数都是实参。-f表明在”名-值”对中的名字是函数名。-n把全局变量转换成局部变量,即命名的变量不在传给子shell。-p显示全局变量列表(全局变量,即在子shell中也有效的变量)。缺省把变量定义为全局变量注:全局变量,在子shell中也有效的变量 局部变量,只在shell脚本中有效的变量let expression 用于求整型表达式的值,如表达式中有空隔,则必须用双引号把表达式括起来,例如: let count=1+2local name=value用于创建不能传给子shell的变量,该命令仅在过程内部有
9、效;如local后不跟参数,那么在当前已定义的局部变量列表就送往标准输出显示。 readonly optionname=value用于显示或则设置只读变量和函数,如readonly后不跟参数,则在案标准输出上显示已定义的只读变量和函数.-表明选项结束.所有后续参数都是实参-f创建只读函数unset option name name 用于取消变量和函数的定义(即删除变量),但PATH、IFS、PPID、PS1、PS2、UID、EUID等变量不能删除。l 引号规则用单引号()把该字符串引起来,shell对单引号中的任何特殊字符不做任何解释,而只是简单保持原状,例:$TestString=$PATH
10、 * a-x? 2&1$echo $TestString$PATH * a-x? 2&1用双引号把字符串引起来,则$、四个字符有特殊含义,要对其进行特殊解释:$用其后的变量的值来代替这个变量和$告诉shell不要对它后面的那个字符进行特殊处理,按本意来处理 告诉shell用两个反引号之间的命令的结果代替那个命令串(包括两个反引号)会同前一个批配 例: $TestString=$PATH $PATH$echo $TestString $ .:/usr/bin:/bin $PATH 例: $TestString=pwd pwd$echo $TestString$ /usr/home pwdl 变量
11、替换简单的变量替换用$ + 变量名即可,复杂的变量替换如下: 表示形式说明$variable基本变量替换,花括号限定变量名的开始与结束$varibale:-default如变量variable没有值,则表达式返回default的值$variable:=default如变量variable没有值,则表达式返回default的值;如果variable没有设置,则把default的值赋予它$variable:+default如果variable被设置,则这种表示形式返回value,否则返回空串$#variable这种表示形式返回variable值的长度,除非variable是*或者.在为*或者的特殊
12、情况下,则返回$表示的元素的个数.$保存的是传给该脚本的参数清单$variable:?message如果variable没有值,则这种表示形式返回message的值.shell也显示出variable的名字,这种形式对捕获错误很有效例:PS1=$HOST:-uname n这里的替换不影响HOST本身的值。例:PS1=$HOST:=uname n执行完该语句后,HOST和PS1都被赋值。第三章 输出常用如下两个命令用于向终端打印信息:echoprintfecho命令常用于需要进行简单格式化的字符串打印;printf命令是Shell版本的C语言函数printf,它为格式化输出提供了高度的灵活性。e
13、cho命令用于向终端输出信息的最常用命令是echo命令,用法为:echo string这里,string是要向屏幕打印输出的字符串,如命令:echo Hi产生如下输出:Hi也可以将空格嵌入到输出中,例如:$echo Hello World!Hello World!除了空格,还可以在string中嵌入格式化转义序列。echo命令的常用转义序列转义序列描述n打印一个换行符t打印一个跳格符(tab符)c打印字符串时不带换行符 打印一个双引号不管什么时候,如果在echo命令的输入字符串中用到转义序列,必须在字符串前后加上双引号。printf命令printf命令类似于echo命令,最基本的使用与echo
14、一样,以下echo命令:echo Hello World!等同于printf Hello World!printf命令与C语言中的printf函数一样,还可以使用格式化串来实现复杂的格式化输出功能,语法如下:printf format argument格式化序列的格式如下:%-m.nx这里%用于标识格式化序列的开始,x标识格式化序列的类型,下表给出了x常用的值:格式化序列类型字母描述s字符串c单个字符d十进制整数x十六进制整数f符点数第四章 输入在shell中使用read 命令接收变量输入,语法:read variable variable.例:$ cat color6echo This pr
15、ogram prompts for user inputecho “please enter your favorite two colors - c”read color_a color_becho The colors you entered are: $color_b $color_a$ chmod +x color6$ color6This program prompts for user input Please enter your favorite two colors - red blueThe colors you entered are: blue red$ color6T
16、his program prompts for user inputPlease enter you favorite two colors - red blue tanThe color you enterd are :blue tan red用户使用命令行参数传递信息进程序,在命令执行之前,用户必须知道正确的语法。有一种情况,你想要在用户执行程序的时候提示他输入这些参数。read命令就是用来在程序执行的时候收集终端键入的信息。通常使用echo命令来提供用户一个提示,让用户知道程序正在等待一些输入,同时通知用户应该输入的类型。因此,每一个read命令应该在echo命令前面。read命令会给出
17、一个变量名的列表,这些变量会被用户在提示符下输入的词赋值(以空格分隔)。如果read命令定义的变量比输入的词要多,剩余变量会被赋空值。如果用户输入的词要比变量多,剩余的数据会赋给列表中的最后一个变量。一旦被赋值,你就可以象其他的shell变量一样存取这些变量。以下例子提示用户输入要被安装的文件名:$ cat my_install3echo $0 will install files into your bin directoryecho “Enter the names of the files - c”read filenamesmv $filenames $HOME/binecho Ins
18、tllation is completectrl + d$ chmod +x my_install13 $ my_install13my_install13 will install files into your bin directoryEnter the names of the files - f1 f2Installaton is complete这个安装会提示用户输入chmod和移动到$HOME/bin的文件名。这个程序给用户更多的关于应该输入数据情况的指引。而不像install2中用户必须在命令行中提供文件名。用户使用程序不需要特殊的语法。程序让用户确切地知道要输入什么。所有的输
19、入的文件名都会被赋值给变量filenames。第五章 重定向shell提供重定向一个命令的输入和输出的功能。大多数的命令的输出是输出到终端屏幕;比如date,ls,who等等,很多命令从键盘得到输入,命令包括mail、write、cat。在UNIX系统中任何对象都是一个文件,包括终端和键盘都是一个文件。输出重定向 让你将一个命令的输出送到除终端以外的其他的文件中。而输入重定向让你从键盘以外的文件中得到输入。输出重定向可以用来捕获一个命令的输出,作为日志记录记录下来,或者对其进行更进一步的处理。输入重定向可以让你可以使用一个编辑器创建一个文件,然后将这个文件送到一个命令,而来代替没有编辑的能力的
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 最新 unix 培训教材 SHELL 编程
限制150内