第15章 Linux 下的编程.ppt
Linux下的编程下的编程 上上机机实实训训案案 例例 三三 及及 其其 相相 关关 内内 容容案案 例例 二二 及及 其其 相相 关关 内内 容容 基基础础内内容容介介绍绍案案 例例 一一 及及 其其 相相 关关 内内 容容 课课程程总总结结 Linux下下的的编编程程第十五章 Linux下的编程下的编程教学目的与要求通过本节课的学习,您应学会:掌握Linux下的c/c+编译方法掌握Linux下的shell编程控制结构掌握Linux下shell编程的函数调用Linux下的编程下的编程15-1 Linux下的编程Linux的发行版中包含了很多软件开发工的发行版中包含了很多软件开发工具。它们中的很多是用于具。它们中的很多是用于C和和C+应用应用程序开发的,本文介绍了在程序开发的,本文介绍了在Linux下能用下能用于于C应用程序开发和调试的工具。应用程序开发和调试的工具。Linux下的进行网页的开发。下的进行网页的开发。Linux下的下的shell编程。编程。Linux下的编程下的编程返回首页返回首页Linux下的编程下的编程给出案例给出案例案例一1、编写简单的c程序,并用Linux下的gcc编译器编译。2、编写简单c+程序,并用Linux下的g+编译器编译Linux下的编程下的编程GCC(GNUCCompiler)是是GNU推推出出的的功功能能强强大大、性性能能优优越越的的多多平平台台编编译译器器,是是GNU的的代代表表作作品品之之一一。GCC是是可可以以在在多多种种硬硬件件平平台台上上编编译译出出可可执执行行程程序序的的超超级级编编辑辑器器,其其执执行行效效率率与与一般编译器相比平均效率要高出一般编译器相比平均效率要高出20%30%。15-2GCC介绍介绍与案例有关的内容分析与案例有关的内容分析Linux下的编程下的编程GNU C 编编译译器器(GCC)是是一一个个全全功功能能的的ANSIC兼兼容容编编译译器器.如如果果你你熟熟悉悉其其他他操操作作系系统统或或硬硬件件平平台台上上的的一一种种C编编译译器器,你你将将能能很很快快地地掌掌握握GCC.本本节节将将介介绍绍如如何何使使用用GCC和和一一些些GCC编编译译器器最最常常用用的选项。的选项。15-2GCC介绍介绍与案例有关的内容分析与案例有关的内容分析Linux下的编程下的编程GCC编编译译器器能能将将C、C+语语言言源源程程序序、汇汇编编程程序序和和目目标标程程序序编编译译、连连接接成成可可执执行行文文件件,如如果果没没有有给给出出可可执执行行文文件件的的名名字字,GCC将将生生成成一一个个名名为为a.out的的文文件件。在在Linux系系统统中中,可可执执行行文文件件没没有有统统一一的的后后缀缀,系系统统从从文文件件属属性性来来区区分分可可执执行行文文件件和和不不可可执执行行文文件件。而而GCC则则通通过过后后缀缀来来区区别别输输入文件的类别。入文件的类别。15-2GCC介绍介绍与案例有关的内容分析与案例有关的内容分析Linux下的编程下的编程以以.c为后缀的文件,是为后缀的文件,是C语言源代码文件;语言源代码文件;以以.a为后缀的文件,是由目标文件构成的档案库文件;为后缀的文件,是由目标文件构成的档案库文件;以以.C,.cc或或.cpp为后缀的文件,是为后缀的文件,是C+源代码文件;源代码文件;以以.h为后缀的文件,是程序所包含的头文件;为后缀的文件,是程序所包含的头文件;以以.i为后缀的文件,是已经预处理的为后缀的文件,是已经预处理的C源代码文件;源代码文件;以以.ii为后缀的文件,是已经预处理的为后缀的文件,是已经预处理的C+源代码文件;源代码文件;以以.m为后缀的文件,是为后缀的文件,是Objective-C源代码文件;源代码文件;以以.o为后缀的文件,是编译后的目标文件;为后缀的文件,是编译后的目标文件;以以.s为后缀的文件,是汇编语言源代码文件;为后缀的文件,是汇编语言源代码文件;以以.S为后缀的文件,是经过预编译的汇编语言源代码文件。为后缀的文件,是经过预编译的汇编语言源代码文件。15-2GCC介绍介绍与案例有关的内容分析与案例有关的内容分析Linux下的编程下的编程使用GCC编译程序时,编译过程可以被细分为四个阶段:预处理(Pre-Processing)编译(Compiling)汇编(Assembling)链接(Linking)15-2GCC介绍介绍与案例有关的内容分析与案例有关的内容分析Linux下的编程下的编程预处理(Pre-Processing)使用-E参数可以让GCC在预处理结束后停止编译过程:生成.i的文件#gcc-E hello.c-o hello.i15-2GCC介绍介绍与案例有关的内容分析与案例有关的内容分析Linux下的编程下的编程编译(Compiling)下一步是将hello.i编译为目标代码,这可以通过使用-c参数来完成:#gcc-c hello.i-o hello.o15-2GCC介绍介绍与案例有关的内容分析与案例有关的内容分析Linux下的编程下的编程汇编(Assembling)和链接(Linking)#gcc hello.o-o hello15-2GCC介绍介绍与案例有关的内容分析与案例有关的内容分析Linux下的编程下的编程gcc命令格式:gcc options filenames。15-2GCC使用格式使用格式与案例有关的内容分析与案例有关的内容分析Linux下的编程下的编程-x language filename:设定文件使用的语言,使后缀名无效。例如:gcc x c hello.cd /指定文件所使用的语言为C,虽然其后缀为.cd-x none filename:让GCC根据文件后缀,自动识别文件类型。例如:gcc x c hello.cd -x none test.c /将根据test.c的后缀名来识别文件,而指定hello.cd的文件类型为C文件Linux下的编程下的编程-c:只激活预处理、编译和汇编,即只是把程序编译成obj文件(目标文件)。例如:#gcc c hello.c /生成.o 的obj文件:hello.o-S:只激活预处理和编译,即把文件编译成汇编代码。例如:#gcc S hello.c /生成.s 的汇编代码,可以使用文本编辑器进行查看。Linux下的编程下的编程-E只激活预处理而不生成文件,要把它重定向到一个输出文件里。例如:#gcc E hello.c check.txt-o:制定目标名称,例如:#gcc o hello hello.c#gcc o hello.asm-S hello.cLinux下的编程下的编程-include file:包含某个代码,简单来说,就是当某一个文件需要另一个文件的时候,就可以用该选项进行设定,功能就相当于在代码中使用#include。例如#gcc hello.c include/root/pic.h /编译hello.c 文件时包含根目录下的pic.h头文件。Linux下的编程下的编程2、C程序、传统c+常用的头文件#include /设定插入点#include /字符处理#include /定义错误码#include /浮点数处理#include /文件输入输出#include /参数化输入输出#include /数据流输入输出#include/定义数学函数#include /定义输入输出函数#include/定义杂项函数及内存分配函数#include/字符串处理#include/基于数组的的输入输出#include/定义关于时间的的函数#include /宽字符处理及输入输出#include/宽字符分类Linux下的编程下的编程1、编写简单的c程序,并用Linux下的gcc编译器编译。1)用vi编译器编辑程序如下:rootlocalhost root Vi hello.c#include int main()printf(Hello world,Linux programming!n);return 0;2)执行命令编译和运行程序,目标程序名为hellorootlocalhost root#gcc hello.c-o hello rootlocalhost root#./hello Hello world,Linux programming!案例解答案例解答Linux下的编程下的编程g+and GCC分别是gnu的c&c+编译器 GCC/g+在执行编译工作的时候,总共需要4步:预处理,生成.i的文件。将预处理后的文件不转换成汇编语言,生成文件.s。由汇编变为目标代码(机器代码)生成.o的文件。连接目标代码,生成可执行程序。Linux下的编程下的编程 g+和GCC区别两者都可以编译C和C+代码,但它们的区别如下:(1).后缀为.c的,GCC把它当作是C程序,而g+当作是c+程序;后缀为.cpp的,两者 都会认为是c+程序,虽然c+是c的超集,但是两者对语法的要求是有区别的。C+的语法规则更加严谨一些。(2).编译阶段,g+会调用GCC,对于c+代码,两者是等价的,但是因为GCC命令不能自动和C程序使用的库联接,所以通常用g+来完成链接,为了统一起见,干脆编译/链接统统用g+了,这就给人一种错觉,好像cpp程序只能用g+似的。Linux下的编程下的编程2、编写简单c+程序,并用Linux下的g+编译器编译1)用vi编辑器编辑程序test1.cc内容如下:rootlocalhost root vi test1.cc#include using namespace std;int main()cout”this is a c+test”endl;return 0;2)执行命令编译和运行程序,目标程序名为test1rootlocalhost root#g+-o test1 test1.cc rootlocalhost root#./test1this is a c+test案例解答案例解答Linux下的编程下的编程返回首页返回首页Linux下的编程下的编程给出案例给出案例案例二Linux下的简单下的简单php编程编程Linux下的编程下的编程PHP最初是在1994年Rasmus Lerdorf 开始计划发展 的。在 1995年 以 Personal Home Page Tools(PHP Tools)开始对外发表第一个版本。PHP跟Apache服务器紧密结合。其源代码完全公开。15-3PHP简介简介 与案例有关的内容分析与案例有关的内容分析Linux下的编程下的编程PHP具具有有强强大大的的数数据据库库功功能能,其其特特点点就就是是内内置置了了对对很多数据库的支持,而不再需要重新扩充很多数据库的支持,而不再需要重新扩充PHP作作为为一一种种能能快快速速学学习习、跨跨平平台台、有有良良好好数数据据库库交交互互能能力力的的开开发发语语言言,使使UNIX/Linux有有了了一一种种与与ASP媲美的开发语言。媲美的开发语言。15-3PHP简介简介 与案例有关的内容分析与案例有关的内容分析Linux下的编程下的编程PHP具具有有良良好好的的安安全全性性,由由于于PHP本本身身的的代代码码开开放放,所所以以其其代代码码在在许许多多工工程程师师手手中中进进行行了了检检测测,同同时时与与Apache编编译译在在一一起起的的方方式式也也可可以以使使其其具具有有灵灵活活的的安安全全设设定定。所所以以到到现现在在为为止止,PHP具具有有公公认认的安全性能。的安全性能。总总而而言言之之,PHP是是进进行行动动态态网网页页编编程程的的一一个个非非常常好好的工具。的工具。15-3PHP简介简介 与案例有关的内容分析与案例有关的内容分析Linux下的编程下的编程用户可以从用户可以从PHP官方站点官方站点(http:/ Linux下的编程下的编程安装步骤#cp libxml2-2.5.11.tar.gz /usr /将该工具包拷贝到/usr目录#cd/usr /切换工作目录#tar xzvf libxml2-2.5.11.tar.gz /解压#cd libxml2-2.5.11 /切换目录#./configure /进行编译前配置#make /编译#make install /执行make installLinux下的编程下的编程/接着安装PHP5.3.0#cp php5.3.0.tar.gz/usr /将该工具包拷贝到/usr#cd/usr /切换工作目录#tar xzvf php5.3.0.tar.gz /解压#cd php5.3.0 /切换目录#./configure /进行编译前配置#make /编译#make install /执行make installLinux下的编程下的编程15-4 Apache+php的应用为了正常运行PHP5.0以上版本,还需要编辑apache配置文件httpd.conf的部分选项,并保存即可。主要改动如下:在#AddType application/x-tar.tgz下加一行AddType application/x-httpd-php.php。将#LoadModule php5_module modules/libphp5.so的#号去掉。在DirectoryIndex index.html.html index.html.var后面加index.php使其把index.php Linux下的编程下的编程找到#dont use Group#-1 on these systems!,把该行下面的用户名和组改为User apache和Group apache。去掉#serverName前面的#,并把后面的IP改成实际的Web服务器IP。找到DocumentRoot“/usr/local/apache2/htdocs”,把/usr/local/apache2/htdocs改为用户存放网页文件的路径。为了使中文网页不出现乱码,找到AddDefaultCharset iso8859-1选项,把后面的iso8859-1改为gb2313。Linux下的编程下的编程H1HR一个简单的PHP程序Linux下的编程下的编程给出案例给出案例案例三 Linux下的下的shell编程编程 1.编写简单的shell程序,显示当前的日期和时间。2.通过函数调用的方法上述功能。3.用循环语句编写1-1000累计求和程序。Linux下的编程下的编程15.1 什么是Shell15.2 shell脚本介绍15.3 shell变量15.4 控制结构语句与案例有关的内容分析与案例有关的内容分析Linux下的编程下的编程15.1 shell的概念Shell是核心程序之外的指令解释器,是一个是核心程序之外的指令解释器,是一个程序,同时是一种命令语言和程序设计语言,程序,同时是一种命令语言和程序设计语言,作为作为命令语言命令语言,它可以交互式地解析、执行,它可以交互式地解析、执行用户输入的命令,作为用户输入的命令,作为程序设计语言程序设计语言,它定,它定义了各种变量和参数,并且提供了许多在高义了各种变量和参数,并且提供了许多在高级程序设计语言的程序控制结构。级程序设计语言的程序控制结构。Linux下的编程下的编程15.1.2 shell的类型的类型它虽然不是它虽然不是Linux操作系统核心的一部分,但操作系统核心的一部分,但它调用系统核心中的大部分功能来执行程序它调用系统核心中的大部分功能来执行程序建立文件,并以并行的方式来协调各个程序建立文件,并以并行的方式来协调各个程序的运行的运行。Shell的类型:的类型:ash、bash、csh、kshLinux下的编程下的编程ash:shell 是由Kenneth Almquist编写的,Linux中占用系统资源最少的一个小shell它只包含24个内部命令,因而使用起来很不方便。bash :bash是Linux系统默认使用的shell,它由Brian Fox和Chet Ramey共同完成,是Bourne Again Shell 的缩写,内部命令一共有40个。Linux默认的shell。Linux下的编程下的编程ksh:ksh是Korn shell的缩写,由Eric Gisin编写,共有42条内部命令。该 shell最大的优点是几乎和商业发行版的ksh完全兼容,这样就可以在不用花钱购买商业版本的情况下尝试商业版本的性能了。csh:csh是Linux比较大的内核,它由以William Joy为代表的共计47位作者编成,共有52个内部命令。该shell其实是指向/bin/tcsh这样的一个shell,也就是说,csh其实就是tcsh。Linux下的编程下的编程15.1.2 shell的类型的类型/etc/shells:使用:使用cat/etc/shells可以获得系统可以获得系统中有哪些命令解释器中有哪些命令解释器Linux下的编程下的编程echo$SHELL可获得当前运行的可获得当前运行的shell 所有的程序都在所有的程序都在shell中运行中运行shell中可以运行子中可以运行子shell(可用如下命令可用如下命令)#/bin/csh#exit15.1.2 shell的类型的类型Linux下的编程下的编程Linux下的编程下的编程15.1.3 bash的特性bash是默认的是默认的Linuxshell特点:特点:1.利用上下方向键可以快速使用使用过的命令。2.利用Tab补全命令或者查找有关命令(以指定字符串或者字符开头的命令列表)3.提供自动帮助,获得帮助信息#helpLinux下的编程下的编程15.2 shell脚本介绍本节内容本节内容:使用使用shell脚本的原因脚本的原因shell脚本基本元素。脚本基本元素。shell脚本运行方式。脚本运行方式。Linux下的编程下的编程 15.2.1 使用shell脚本的原因shell脚本在处理自动循环或大的任务方面可节省脚本在处理自动循环或大的任务方面可节省大量的时间,且功能强大。大量的时间,且功能强大。对于不同的对于不同的UNIX和和LINUX,使用一段,使用一段shell脚本将脚本将需要一些小小的改动才能运行通过。需要一些小小的改动才能运行通过。Linux下的编程下的编程15.2.2 shell脚本基本元素脚本不是复杂的程序,它是按行解释的。脚本第一脚本不是复杂的程序,它是按行解释的。脚本第一行总是以行总是以#!/bin/sh开始,这段脚本通知开始,这段脚本通知shell使使用系统上的用系统上的Bourneshell解释器。解释器。任何脚本都可能有注释,加注释需要此行的第一个任何脚本都可能有注释,加注释需要此行的第一个字符为字符为#,解释器对此行不予解释。在第二行注释,解释器对此行不予解释。在第二行注释中写入脚本名是一个好习惯。中写入脚本名是一个好习惯。脚本从上到下执行,运行脚本前需要增加其执行权脚本从上到下执行,运行脚本前需要增加其执行权限。确保正确建立脚本路径,这样只用文件名就可限。确保正确建立脚本路径,这样只用文件名就可以运行它了。以运行它了。Linux下的编程下的编程15.2.3 shell脚本运行方式上述脚本清除上述脚本清除/var/adm/下信息,并删除下信息,并删除/usr/local/apps/log下所有注册信息。下所有注册信息。1.编辑脚本编辑脚本rootlocalhostroot#vicleanup/启动启动vi编辑器编辑器#!/bin/sh/shell脚本第一行开始脚本第一行开始#name:cleanup/脚本名称脚本名称#thisisageneralcleanupscript/脚本功能解释脚本功能解释echo“startingcleanupwait”/脚本内容脚本内容rm/usr/local/apps/log/*.log/删除目录下的日志文件删除目录下的日志文件tail-40/var/adm/messages/tmp/messages/最后最后40行转移到临时文行转移到临时文件件rm/var/adm/messages/删除删除/var/adm/messagesmv/tmp/messages/var/adm/messages/临时文件移动临时文件移动/var/adm/messagesecho“finishedcleanup”/清理完成清理完成Linux下的编程下的编程2.使用chmod命令增加脚本执行权限 rootlocalhost root#chmod u+x cleanup 3.运行脚本,只敲入文件名即可。rootlocalhost root#./cleanupLinux下的编程下的编程15.3 shell变量变量可以定制用户本身的工作环境。使用变变量可以定制用户本身的工作环境。使用变量可以保存有用信息,使系统获知用户相关量可以保存有用信息,使系统获知用户相关设置。变量也用于保存暂时信息。设置。变量也用于保存暂时信息。Linux下的编程下的编程15.3.1 本地变量15.3.2 环境变量15.3.3 位置变量15.3.4 特定变量参数Linux下的编程下的编程15.3.1 本地变量本地变量在用户现在的shell生命期的脚本中使用。优点:用户不能对其他的shell或进程设置此变量有效 使用变量时,如果用花括号将之括起来,可以防止shell误解变量值,尽管不必一定要这样做,但这确实可用。要设置一本地变量,格式为:$variable-name=value 或$variable-name=valueLinux下的编程下的编程变量设置模式说明变量设置模式说明Variable-name=value Variable-name=value设置实际值到variable-nameVariable-name+alue 如果设置了variable-name,则重设其值Variable-name:?value 如果未设置variable-name,显示未定义用户错误信息 Variable-name?value 如果未设置variable-name,显示系统错误信息 Variable-name:=value 如果未设置variable-name,设置其值 Variable-name:-value 如果未设置variable-name,设置其值,但值是替换 变量设置时的不同模式 Linux下的编程下的编程显示变量显示变量使用echo命令可以显示单个变量取值,并在变量名前加$,例如:#GREAT_PICTURE=”die hard”#echo$GREAT_PICTURE die hardLinux下的编程下的编程清除变量清除变量 使用unset命令清除变量。unset variable-name例如:rootlocalhost root#pc=enterpricerootlocalhost root#echo$pc Enterpricerootlocalhost root#unset pcrootlocalhost root#echo$pcrootlocalhost root#Linux下的编程下的编程测试变量是否已经设置测试变量是否已经设置(1)有时要测试是否已设置或初始化变量。如果未设置或初始化,就可以使用另一值。此命令格式为:$variable:-value 如果设置了变量值,则使用它,如果未设置,则取新值。#colour=blue#echo“the sky is$colour:-grey today”The sky is blue todayLinux下的编程下的编程测试变量是否已经设置测试变量是否已经设置(2)上面的例子并没有将实际值传给变量,需使用下述上面的例子并没有将实际值传给变量,需使用下述命令完成此功能:命令完成此功能:$variable:=value p 变量变量colour取值取值blue,echo打印变量打印变量colour时,首时,首先查看其是否已赋值,如果查到,则使用该值。现先查看其是否已赋值,如果查到,则使用该值。现在清除该值,在清除该值,再来看看结果。再来看看结果。rootlocalhostroot#colour=bluerootlocalhostrootunsetcolourrootlocalhostroot#echo“theskyis$colour:-greytoday”TheskyisgreytodayLinux下的编程下的编程实用的例子 查询工资清单应用的运行时间及清单类型。在运行查询工资清单应用的运行时间及清单类型。在运行时间及类型输入时,敲回车键表明用户并没有设置时间及类型输入时,敲回车键表明用户并没有设置两个变量值,将使用缺省值(两个变量值,将使用缺省值(03:00和和Weekly),),并传入并传入at命令中以按时启动作业。命令中以按时启动作业。Linux下的编程下的编程实用的例子在输入域敲回车键,输出结果如下:在输入域敲回车键,输出结果如下:Linux下的编程下的编程15.3.2环境变量环境变量环境变量用于所有用户进程。不像本地变环境变量用于所有用户进程。不像本地变量只用于现在的量只用于现在的shell,环境变量可用于所,环境变量可用于所有子进程,这包括编辑器、脚本和应用。有子进程,这包括编辑器、脚本和应用。Linux下的编程下的编程15.3.2环境变量环境变量环境变量可以在命令行中设置,但用户注销环境变量可以在命令行中设置,但用户注销时这些值将丢失,因此最好在时这些值将丢失,因此最好在.profile文件文件中定义。系统管理员可能在中定义。系统管理员可能在/etc/profile文文件中已经设置了一些环境变量。将之放入件中已经设置了一些环境变量。将之放入profile文件意味着每次登录时这些值都将被文件意味着每次登录时这些值都将被初始化。初始化。Linux下的编程下的编程设置环境变量设置环境变量传统上,所有环境变量均为大写。传统上,所有环境变量均为大写。环境变量应环境变量应用于用户进程前,必须用用于用户进程前,必须用export命令导出。命令导出。环境变量与本地变量设置方式相同。环境变量与本地变量设置方式相同。VARIABLE-NAME=value;exportVARIABLE-NAME在两个命令之间是一个分号,也可以这样写:在两个命令之间是一个分号,也可以这样写:VARIABLE-NAME=valueExportVARIABLE-NAMELinux下的编程下的编程显示环境变量显示环境变量显示环境变量与显示本地变量一样,例如:显示环境变量与显示本地变量一样,例如:#CONSOLE=tty1;exportCONSOLE#echo$CONSOLEtty1Linux下的编程下的编程查看所有的环境变量使用使用env命令可以查看所有的环境变量命令可以查看所有的环境变量Linux下的编程下的编程清除环境变量 使用unset命令清除环境变量:rootlocalhost root#unset MYPASSrootlocalhost root#echo$MYPASSrootlocalhost root#Linux下的编程下的编程编写简单的shell程序,显示当前的日期和时间。1.用vi编辑器编辑其文件functest,内容如下:#!/bin/bash /shell编程#functest /文件名Function hello()/函数实现 Echo”hello,today is data”/显示今天的日期Echo“now going to the function hello”/函数调用之前显示Hello /函数调用Echo“back from function”/函数调用后显示Linux下的编程下的编程 Linux下的编程下的编程2.修改文件的权限rootlocalhost root#chmod 755 functest3.执行该脚本,并显示结果rootlocalhost root#./functest Now going to the function hello Hello today is 六 8月 13 08:40 41 CST 2009 Back from function rootlocalhost root#Linux下的编程下的编程Linux下的编程下的编程编写简单的shell程序,通过函数调用的方法显示当前的日期和时间。1.用vi编辑器编辑文件functest,内容如下:#!/bin/bash /shell编程#functest .hellofun /文件名 Echo“now going to the function hello”Hello /函数调用 Echo“back from function”Linux下的编程下的编程 2.用vi编辑器编辑文件hellofun,内容如下:#!/bin/bash /shell编程#hellofun Function hello()/函数实现 Echo”hello,today is date”/显示今天的日期 3.修改文件的权限rootlocalhost root#chmod 755 functest 4.执行该脚本,并显示结果rootlocalhost root#./functest Now going to the function hello Hello today is 六 8月 13 08:40 41 CST 2009 Back from functionLinux下的编程下的编程Linux下的编程下的编程Linux下的编程下的编程Linux下的编程下的编程set命令在在$HOME.profile文件中设置环境变量时,还有另一种方法文件中设置环境变量时,还有另一种方法导出这些变量。使用导出这些变量。使用set命令命令-a选项,即选项,即set-a指明所有变量指明所有变量直接被导出。不要在直接被导出。不要在/etc/profile中使用这种方法,最好只中使用这种方法,最好只在自己的在自己的$HOME.profile文件中使用。文件中使用。Linux下的编程下的编程Linux下的编程下的编程Linux下的编程下的编程Linux下的编程下的编程Linux下的编程下的编程15.3.3位置变量位置变量如果要向一个如果要向一个shell脚本传递信息,可以使用脚本传递信息,可以使用位置参数完成此功能。参数相关数目传入脚位置参数完成此功能。参数相关数目传入脚本,此数目可以任意多,但只有前本,此数目可以任意多,但只有前9个可以个可以被访问,使用被访问,使用shift命令可以改变这个限制。命令可以改变这个限制。参数从第一个开始,在第参数从第一个开始,在第9个结束;每个访个结束;每个访问参数前要加问参数前要加$符号。第一个参数为符号。第一个参数为0,表示,表示预留保存实际脚本名字。无论脚本是否有参预留保存实际脚本名字。无论脚本是否有参数,此值均可用。数,此值均可用。Linux下的编程下的编程15.3.3位置变量位置变量如果向脚本传送如果向脚本传送DidYouSeeTheFullMoon信息,下面的表格讲解了如何访问每一信息,下面的表格讲解了如何访问每一个参数。个参数。Linux下的编程下的编程位置变量实例1)用vi编辑器编辑脚本paremrootlocalhost root#vi param#!/bin/sh#paramEcho“This is the script name :$0”Echo“This is the first parameter :$1”Echo“This is the second parameter :$2”Echo“This is the third parameter :$3”Echo“This is the forth parameter :$4”Echo“This is the fifth parameter :$5”Echo“This is the sixth parameter :$6”Echo“This is the seventh parameter :$7”Echo“This is the eight parameter :$8”Echo“This is the ninth parameter :$9”Linux下的编程下的编程位置变量实例2)执行脚本rootlocalhost root#param Did You See The Full MoonThis is the script name :./paramThis is the first parameter :DidThis is the second parameter :YouThis is the third parameter :SeeThis is the forth parameter :TheThis is the fifth parameter :FullThis is the sixth parameter :MoonThis is the seventh parameter This is the eight parameter This is the ninth parameter Linux下的编程下的编程位置变量的例子Linux下的编程下的编程向系统命令传递参数向系统命令传递参数Linux下的编程下的编程15.3.4 特定变量参数特定特定shell变量变量 Linux下的编程下的编程特定变量参数举例Linux下的编程下的编程结果Linux下的编程下的编程最后的退出状态最后的退出状态$?返回返回0。可以在任何命令或脚本中返回此。可以在任何命令或脚本中返回此变量以获得返回信息。基于此信息,可以变量以获得返回信息。基于此信息,可以在脚本中做更进一步的研究,返回在脚本中做更进一步的研究,返回0意味着意味着成功,成功,1为出现错误。为出现错误。p 下面的例子拷贝文件到下面的例子拷贝文件到/tmp,并使用,并使用$?检查结果。检查结果。Linux下的编程下的编程最后的退出状态最后的退出状态 p 现在尝试将一个文件拷入一个不存在的目录或现在尝试将一个文件拷入一个不存在的目录或文件:文件:Linux下的编程下的编程15.3.5 引号1.引用的必要性。2.双引、单引和反引号。3.使用反斜线实现屏蔽。Linux下的编程下的编程引用的必要性脚本中执行行操作时,脚本中执行行操作时,shell将对脚本设置予以解释。要采将对脚本设置予以解释。要采取一种方法防止取一种方法防止shell这样做,即使用引用号,包括各式这样做,即使用引用号,包括各式引用或使用反斜线。引用或使用反斜线。Linux下的编程下的编程双引号使用双引号可引用除字符使用双引号可引用除字符$、外的任意字符或字符串。外的任意字符或字符串。这些特殊字符分别为美元符号,反引号和反斜线,对这些特殊字符分别为美元符号,反引号和反斜线,对shell来说,它们有特殊意义。如果使用双引号将字符串赋给变来说,它们有特殊意义。如果使用双引号将字符串赋给变量并反馈它,实际上与直接反馈变量并无差别量并反馈它,实际上与直接反馈变量并无差别Linux下的编程下的编程其他符号单引号:与单引号:与双双引号类似,不同的是忽略任何引用值。引号类似,不同的是忽略任何引用值。换句话说,如果屏蔽了其特殊含义,会将引号里的换句话说,如果屏蔽了其特殊含义,会将引号里的所有字符,包括引号都作为一个字符串。所有字符,包括引号都作为一个字符串。反引号:用于设置系统命令的输出到变量。反引号:用于设置系统命令的输出到变量。Shell将将反引号中的内容作为一个系统命令,并执行其内容。反引号中的内容作为一个系统命令,并执行其内容。#GIRL=girl#echo“The$GIRL did well”The girl did well#echo dateSunday Janu 8 12:40:56 GMT 2007Linux下的编程下的编程15.4 控制结构语句1变量表达式变量表达式2循环语句循环语句3条件语句条件语句Linux下的编程下的编程15.4.1 变量表达式n在编程中,既然有变量,就有关于变量的表在编程中,既然有变量,就有