linux程序设计基础谷风详析课件_第1页
linux程序设计基础谷风详析课件_第2页
linux程序设计基础谷风详析课件_第3页
linux程序设计基础谷风详析课件_第4页
linux程序设计基础谷风详析课件_第5页
已阅读5页,还剩82页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

第二章Linux程序设计基础本章学习目标通过对本章的学习,读者应该掌握以下主要内容:Linux编程风格Linux下使用GNUcc开发应用程序Linux程序的调试1特制分析1.概述1.1Linux应用软件开发:Linux开发具有活跃的开发环境,Linux开发工作一般是由多个Linux用户共同完成一个项目的。开发工作完成后,该软件就被放到Internet站点上,任何用户都可以访问和下载它。大多数Linux软件是经过自由软件基金会提供的GNU公开认证授权的,因而通常被称作GNU软件。GNU软件免费提供给用户使用,并被证明是非常可靠和高效的。2特制分析Linux程序设计基础1、Linux下c程序开发2、Linux下的shell编程3特制分析Linux下的C语言C语言是一门“中级语言”,是汇编语言和高级语言过渡的一种语言,但是它既具有高级语言简单易懂、灵活方便的特点,同时,他又具有汇编语言的执行高效和可对硬件直接操作的特点。C语言的应用进行底层的开发:如内核开发及基于linux的嵌入式开发。进行顶层的开发:

如linux下的应用程序的开发4特制分析一个完整的开发工具应该包括:编辑工具:vi编辑器编译工具:gcc调试工具:gdb配置、项目管理工具2.1Linux下c程序开发函数库及系统头文件:集成开发环境IDEKylixKdevelopRHIDELinux安装时完成了这些5特制分析Linux下c程序的开发过程:使用vi等编辑工具编写源程序保存为*.c使用gcc编译成二进制可执行文件./文件名执行有问题可以用gdb进行调试6特制分析一、编辑工具:

在Linux下编程,你不再拥有集成化环境,你可以使用类似于记事本的工具---经典的vi来编辑源程序。当然,还有更高档一些的,如joe、emacs等。总之,编辑程序与编译工作是分开的。

vi编辑器有三种工作模式:命令行模式插入模式底行模式编辑hello.c7特制分析1)命令行模式:

用户在用vi编辑文件时,最初进入的一般模式,此时键盘输入当做命令。在该模式中可以进行光标移动、删除、复制、粘贴等操作,但是无法编辑文字。8特制分析命令功能h方向键,向左移动光标一个字符的位置,相当于键“←”j方向键,向下移动光标到下一行的位置,相当于键“↓”k方向键,向上移动光标到上一行的位置,相当于键“↑”l方向键,向右移动光标一个字符的位置,相当于键“→”:N移动光标到第N行(N待定)1G移动光标到文件的第1行G移动光标到文件的最后1行光标命令9特制分析命令功能[N]x(Expurgate)删除从光标位置开始的连续N个字符(并复制到编辑缓冲区)[N]dd(Delete)删除从光标位置开始的连续N行(并复制到编辑缓冲区)[N]yy(Yank)复制从光标位置开始的连续N行到编辑缓冲区p(Put)从编辑缓冲区复制文本到当前光标位置(即粘贴)u(Undo)取消上一次操作(即恢复功能)编辑命令10特制分析2)插入模式:在该模式下,vi编辑器进入编辑状态:状态命令命令功能a(Append)进入编辑状态,从当前光标之前的位置开始插入键盘输入的字符i(Insert)进入编辑状态,从当前光标之后的位置开始插入键盘输入的字符o(Open)进入编辑状态,并插入一新行,光标移到该新行的行首,以后键盘输入的字符将插入到光标位置ESC进入命令状态11特制分析3)末行模式:在该模式下,vi编辑器实现文件的保存和退出。命令功能:q(Quit)退出没有被修改的文件(若文件被修改了而没有保存,则此命令无效):q!强制退出,且不保存修改过的部分:w(Write)保存文件,但不退出:w!强制保存文件,但不退出:wq/:x(Exit)保存文件并退出:x!强制保存文件并退出:wFile另存为File给出的文件名,不退出:w!File强制另存为File给出的文件名,不退出:rFile(Read)读入File指定的文件内容插入到光标位置12特制分析2、编译工具:gccgcc是gnu推出的功能强大性能优越的多平台编译器,gcc能将c、c++、Fottran等语言源文件进行编译、连接生成可执行文件。gcc支持下面后缀名的文件:.cc语言源文件.hc语言头文件

.i已经预处理的源文件.o编译后的目标文件.s汇编语言源代码文件gcc–v查询gcc的版本号13特制分析Gcc编译过程:预处理链接汇编组译源程序(*.c)可执行文件ELF格式预处理器汇编器组译器连接器.o目标文件14特制分析gcc的使用格式如下:gcc[options][filenames]

当使用gcc时,gcc会完成预处理、编译、汇编和连接。前三步生成目标文件,连接时,把生成的目标文件链接成可执行文件。gcc可以针对支持不同的源程序文件进行不同处理,文件格式以文件的后缀来识别。 gcc-o目标文件名源文件名(.c形式的文件)如gcc–ohellohello.c./可执行文件名

进行执行文件15特制分析16特制分析gcc–otest.o–ctest.cgcc–ctest.c

仅把源代码编译为目标代码而跳过连接,优点:当编译多个c程序时速度更快,易于管理。gcc–WALL–otesttest1.ctest2.ctest3.c

有多个源文件生成test,不产生警告信息gcc–ctest.c-otest.ogcc–g–ohellohello.c

编译生成可执行连接文件hello同时生成供调试的信息。17特制分析使用优化选项

当用gcc编译C代码时,它会试着用最少的时间完成编译并且使编译后的代码易于调试.易于调试意味着编译后的代码与源代码有同样的执行次序,编译后的代码没有经过优化。有很多选项可用于告诉gcc,在耗费更多编译时间和牺牲易调试性的基础上,产生更小更快的可执行文件。这些选项中最典型的是-O和-O2选项。18特制分析-O选项告诉gcc对源代码进行基本优化。这些优化在大多数情况下都会使程序执行的更快。

-O2选项告诉gcc产生尽可能小和尽可能快的代码。-O2选项将使编译的速度比使用-O时慢。但通常产生的代码执行速度会更快。Gcc主要完成程序的编译和连接,任何一个源文件首先会生成中间目标文件,再由中间目标文件生成执行文件。19特制分析GNUmake管理项目1、包含多个源文件的项目在编译时都有长而复杂的命令行,每次都分别编译链该项目,比较麻烦。2、当某一个源文件被修改以后,则必须重新编译和链接,最后生成可执行文件。a.cb.ce.cf.c……Makefilea项目目录#make

有了Makefile文件,我们只用一个make命令就可以自动智能地根据当前的文件修改的情况编译所需要的文件和链接目标程序。20特制分析

在执行make指令时makefile的默认文件名为GNUmakefile、makefile或Makefile,当然也可以在make的命令行中指定别的文件名。一、make的执行:#make–fmakefilename#maketarget(目标文件)21特制分析Makefile的文件的基本结构:1、makefile是一个文本形式的数据库文件,其中包含了一些规则告诉make处理哪些文件以及怎么处理这些文件。2、这些规则主要描述一些target目标文件是从哪些依赖文件产生的,以及用什么命令来执行该过程。依靠这些规则,make会对磁盘上的文件进行检查时间差,以便更新目标文件。3、目标文件不一定是最后的可执行文件,可以是任何中间文件,并可以做为其他目标文件的依赖文件。22特制分析#一个简单的Makefile的例子(以#开头的为注释行)test:prog.ocode.o gcc–otestprog.ocode.o

prog.o:prog.cprog.hcode.h gcc–cprog.c–oprog.o

code.o:code.ccode.h gcc–ccode.c–ocode.o

clean:

rm–f*.o#make#makeMakefile#maketest命令行以tab键开始伪目标:#makeclean23特制分析例如:用make编译hello.c单一文件24特制分析

对于一个有很多源文件的项目,当改变一个头文件的时候,由于所有的依赖关系都在Makefile里,因此不再需要记住依赖此头文件的所有源码文件,make可以自动的重新编译所有那些因依赖这个头文件而改变了的源码文件,如果需要,再进行重新连接。25特制分析Makefile文件的简化:1、利用Makefile中的自定义变量:Makefile里的变量就像一个环境变量。事实上,环境变量在make中也被解释成make的变量。这些变量对大小写敏感,一般使用大写宇母。几乎可以从任何地方引用定义的变量,变量的主要作用如下:

a、保存文件名列表b、保存可执行命令名c、保存编译器的参数变量引用:${VARNAME}26特制分析make解释规则时,VARNAME在等式右端展开为定义它的字符串。变量一般都在Makefile的头部定义。按照惯例,所有的Makefile变量都应该是大写。如果变量的值发生变化,就只需要在一个地方修改,从而简化了Makefile的维护。27特制分析现在利用变量把前面的Makefile重写一遍:

OBJS=prog.ocode.o CC=gcc

test:${OBJS} ${CC}–otest${OBJS} prog.o:prog.cprog.hcode.h ${CC}–cprog.c–oprog.o code.o:code.ccode.h ${CC}–ccode.c–ocode.o

clean:

rm–f*.o28特制分析2、利用Makefile中的其它变量:29特制分析一个C编译的具体命令将会是:${CC}${CFLAGS}${CPPFLAGS}–c$^-o$@CFLAGS:c编译器的选项CPP:c预编译器的名称默认值为¥{cc}-ECPPFLAGS:c预编译的选项TARGET_ARCH:目标机器的结构定义预定义变量30特制分析如:源程序为31特制分析经过变量替换过后的makefile文件:32特制分析3、利用Makefile中的隐含规则:现在利用变量把前面的Makefile重写一遍:

OBJS=prog.ocode.o CC=gcc

test:${OBJS} ${CC}–o$@$^ prog.o:prog.cprog.hcode.h code.o:code.ccode.h clean:

rm–f*.o33特制分析使用automake和autoconf产生Makefile

在开始使用Automake和autoconf之前,请先确认系统已经安装以下的软件:

GNUAutomake GNUAutoconf GNUm4 Perl GNULibtool(如果你需要产生sharedlibrary)完成实验内容34特制分析三、调试工具GDB:Linux系统中包含了GNU调试程序gdb,它是一个用来调试C和C++程序的调试器。可以使程序开发者在程序运行时观察程序的内部结构和内存的使用情况。gdb所提供的一些功能如下:1、运行程序,设置所有的能影响程序运行的参数和环境;2、控制程序在指定的条件下停止运行;3、当程序停止时,可以检查程序的状态;4、修改程序的错误,并重新运行程序;5、动态监视程序中变量的值;6、可以单步执行代码,观察程序的运行状态。35特制分析gdb的功能非常强大,到目前为止,gdb已能够支持Moduls-2、Chill、Pascal和FORTRAN程序的调试,但是调试这些语言的源程序时有一些功能还不能使用。

gdb程序调试的对象是可执行文件然而,并不是所有的可执行文件都可以用gdb调试。如果要让产生的可执行文件可以用来调试,需在执行gcc指令编译程序时,加上-g参数,指定程序在编译时包含调试信息。36特制分析GDB命令的基本使用和应用1.gdb基本命令:gdbfilenamegdb支持很多的命令且能实现不同的功能。这些命令从简单的文件装入到允许你检查所调用的堆栈内容的复杂命令,下面列出了在使用gdb调试时会用到的一些命令。37特制分析1)file命令:装入想要调试的可执行文件。2)cd命令:改变工作目录。3)pwd命令:返回当前工作日录。4)run命令:执行当前被调试的程序。5)kill命令:停止正在调试的应用程序。6)list命令:列出正在调试的应用程序的源代码。7)break命令:设置断点。8)Tbreak命令;设置临时断点。它的语法与break相同。区别在于用tbreak设置的断点执行一次之后立即消失。9)watch命令:设置监视点,监视表达式的变化。10)awatch命令:设置读写监视点。当要监视的表达式被读或写时将应用程序挂起。它的语法与watch命令相同。11)rwatch命令:设置读监视点,当监视表达式被读时将程序挂起,等侍调试。此命令的语法与watch相同。12)next命令:执行下一条源代码,但是不进入函数内部。也就是说,将一条函数调用作为一条语句执行。执行这个命令的前提是已经run,开始了代码的执行。13)step命令:执行下一条源代码,进入函数内部。如果调用了某个函数,会跳到函数所在的代码中等候一步步执行。执行这个命令的前提是已经用run开始执行代码。14)display命令:在应用程序每次停止运行时显示表达式的值。15)infobreak命令:显示当前断点列表,包括每个断点到达的次数。16)infofiles命令:显示调试文件的信息。17)infofunc命令:显示所有的函数名。18)infolocal命令:显示当前函数的所有局部变量的信息。19)infoprog命令:显示调试程序的执行状态。20)print命令;显示表达式的值。21)delete命令:删除断点。指定一个断点号码,则删除指定断点。不指定参数则删除所有的断点。22)Shell命令:执行LinuxShell命令。23)make命令:不退出gdb而重新编译生成可执行文件。24)Quit命令:退出gdb。LINUXshell编程变量特殊字符条件判断结构与循环结构函数的定义和使用44特制分析Shell是一个作为用户与LINUX系统间接口的程序,它允许用户向操作系统输入需要执行的命令。shell编程语言如BASH、SH、TCSH、GAWK、Perl、Tcl和Tk都利用自己的解释器。用这些语言编制的文件,可以直接运行。编译器则不同,它将生成一个独立的二进制代码文件然后才可以运行。45特制分析变量用户变量环境变量位置变量预定义变量46特制分析用户变量的定义及其使用与所有的编程语言一样,shell也允许把值存在变量中,shell变量名以字母或下划线字符开始,由字母、数字或下划线组成要把值存入变量,只要写出变量名,或紧跟一个=,再加变量值即可例如:variable=valuecount=1在程序中使用变量的值时,要在变量名前面加上一个符号“$”。这个符号告诉Shell,要读取该变量的值。例如:echo$variable47特制分析环境变量环境变量是一种特殊的变量,其特点为:它们可以由其他程序传递给脚本在脚本中被调用的任何程序都将继承环境变量可以像定义一个变量一样来设置环境变量,在标记它为环境变量时需要使用“

export”命令应用示例:

$exportMYENV=1 $echo$MYENV使用“

set”命令可以获取当前上下文中全部的变量

48特制分析位置参数执行Shell脚本时可以使用参数。由出现命令行上的位置确定的参数称做位置参数。在sh中总共有十个位置参数,其对应的名称依次是$0,$1,$2,...$9。其中$0始终表示命令名或Shell脚本名,对于一个命令行,必然有命令名,也就必定有$0;而其它位置参数依据实际需求,可有可无。应用示例:编辑ison文件内容如下who|grep$1

执行:$chmod+xison $./isonbcshell将用bc代替$1,命令行变为:who|grepbc

49特制分析shift命令shift命令的作用是把位置参数左移原来在$2中的内容赋给$1,$3中内容赋给$2,依此类推。原来$1中的值就丢失了。$#(参数变量的个数)也自动减1

50特制分析shift命令(二)编辑shiftdemo程序如下:

echo$#$*shiftecho$#$*shiftecho$#$*shiftecho$#$*

执行:chmod+xshiftdemo ./shiftdemoabc51特制分析预定义变量$#变量用于存放命令行中所键入的参数个数shell程序测试这个变量确定用户输入的参数个数是否正确应用示例:编辑args文件内容如下:

echo$#argumentspassedechoarg1=:$1:arg2=:$2:arg3=:$3:

执行:$argsabc$argsab$args从这个例子可以看到shell程序将命令行的参数个数传递给了$#变量

52特制分析预定义变量$*变量可以引用传递给程序的所有参数经常应用在参数不确定或者参数数目可变的程序中应用示例:编辑args2文件内容如下:

echo$#argumentspassedechotheyare$*

执行:$chmod+xargs2 $arg2abc $arg2ab$arg2

53特制分析预定义变量$@变量$@变量和$*变量功能基本相同改写args2程序如下:

echo$#argumentspassedechotheyare$@54特制分析预定义变量 $?变量每当程序执行完成后都会给系统返回一个退出状态。该状态是个数值,通常指示该命令运行是否成功。退出状态为0表示运行成功,非零表示运行失败。Shell自动将最后所执行命令的退出状态设置到shell变量$?中,可以用echo命令在终端上显示它的值应用示例

$who|grepbc $echo$? $who|grep123 $echo$?

55特制分析特殊字符

通配符通常的通配符有三种:*星号,它匹配任意字符的0次或多次出现。但注意,文件名前面的圆点(.)和路径名中的斜线(/)必须显示匹配。?问号,它匹配任意一个字符。[]一对方括号,其中有一个字符组。其作用是匹配该字符组所限定的任意一个字符。应该注意:字符*和?在一对方括号外面是通配符,若出现在其内部,它们就失去通配符的能力了。!叹号,若它紧跟在一对方括号的左方括号[之

后,则表示不在一对方括号中所列出的字符。

56特制分析特殊字符

引号双引号”

由双引号括起来的字符,除$、倒引号和反斜线(\)仍保留其功能外,其余字符通常作为普通字符对待。单引号‘

由单引号括起来的字符都作为普通字符出现。倒引号``

反引号用于设置系统命令的输出到变量。shell将反引号中的内容作为一个系统命令,并执行其内容。反斜线

转义字符,若想在字符串中使用反斜线本身,则必须采用(\\)的形式,其中第一个反斜线作为转义字符,而把第二个反斜线变为普通字符。57特制分析条件判断条件判断语句是几乎所有编程语言中都有的语句,shell中有两种条件判断语句:if表达式case表达式

58特制分析if表达式一般结构

ifconmmand1 then elifcommand2 then else … fi

这个if…then…else表达式中的else和elif是可选部分。其中elif是elseif得缩写,在if…then…else表达式中这样的elseif语句可以有多个。其中fi表示if…then…else表达式的结束。Bash支持此类表达式的多层嵌套。其中command1需要执行并检测其退出状态,如果退出状态为0,则执行其后then与elif之间的语句,同理执行并检测command2的退出状态,并根据退出状态是否为0选择执行elif与else之间或else与fi之间的语句59特制分析test命令shell有一条内部命令test,经常用来在if命令中测试一种或几种条件,其一般格式为:

testexpression其中expression表示要测试的条件。test计算expression,若结果为真,其返回的退出状态为0,若结果为假,返回的退出状态就不为零应用示例:

$name=bc $test“$name”=bc $echo$?※注意:test把所有操作数($name和bc)和操作符作为单独的参数分别对待,也就是说它们之间至少要有一个空白字符分隔

60特制分析test命令(二)test命令的另一种格式shell程序使用test命令非常频繁,因此产生了另一种公认的命令格式:

[expression]“[”实际上就是命令的名字,同时要求在表达式的有一个配对的“]”,在“[“之后和”]”之前都要有空格应用示例:

$name=bc $[“$name”=bc] $echo$?

61特制分析test命令(三)整数操作符test命令还有一类进行整数比较的操作符,见右表:例如:操作符“-eq”检测两个整数是否相等,如果有一个变量名为count,想看看它的值是否为0,则可以写成:[“$count”

–eq0]操作符返回真(退出状态为0)的条件int1–eqint2int1等于int2int1–geint2int1大于或等于int2int1–gtint2int1大于int2int1–leint2int1小于或等于int2int1–ltint2int1小于int2int1–neint2int1不等于int262特制分析test命令(四)文件操作符test提供了一类问询文件状态的一元操作符,见右表:例如:[-f/etc/fstab]检测fstab文件是否存在且是否为普通文件

63特制分析if结构应用示例使用if…then…else结构编写一个判断命令行所传入参数大小的程序将所输入数值存放在位置参数$1中若$1>100,则输出:thenumberisgreaterthan100若$1<10,则输出:thenumberissmallerthan10否则输出:thenumberisbetween10and100

64特制分析if表达式应用示例(二)编辑ifdemo程序如下if["$1"-gt100]thenecho"thenumberisgreaterthan100."elif["$1"-lt10]thenecho"thenumberissmallerthan10."elseecho"thenumberisbetween10and100."fi执行$chmod+xifdemo$./ifdemo100…

输入数据测试程序功能

65特制分析case表达式case表达式类似于C语言中的case语句和switch语句,即从几种情况中选择一种执行。一般结构

casestringinstring1)

…;;string2)

…;;*)

…;;esac66特制分析case表达式(二)关键字是case、in、双分号和esac。字符串string首先与string1和string2比较,如果匹配就执行它们下面的语句直到双分号。如果字符串string与列出的字符串都不匹配,则执行*)下面的语句

67特制分析case表达式(三)应用示例:编写一个实现中英文数字转换的程序,编辑casedemo程序如下:if["$#"-ne1]thenecho"usage:./casedemonumber"exit1ficase"$1"in0)echozero;;1)echoone;;2)echotwo;;

………………8)echoeight;;9)echonine;;esac68特制分析循环shell中提供了可供灵活处理循环的语句,这些循环可以重复执行一组命令,既可以是事先指定的次数,也可以是直到某种条件满足为止。shell中有三个内部循环命令:forwhile{…}until

69特制分析for命令for命令用来将一组命令循环执行预先确定的次数基本格式:forvarinword1word2…wordndo command done应用示例:

$foriin123>do>echo$i>done可以看到终端上依次输出1、2、3

70特制分析不带列表的for命令for命令也可以写成以下形式:forvardo commanddoneshell也能认出这种少了in的特殊格式,shell会自动将命令行键入的所有参数依次组织成列表。应用示例:编辑fordemo文件内容如下:

echoNumberofargumentspassedis$# forargdoecho$argdone执行:$chmod+xfordemo$./fordemoabc

71特制分析while命令第二种循环命令是while,格式为:whilecommand1do commanddone先执行command1,并检测其退出状态,如果为0则执行do与done之间命令,再次检测直到command1退出状态不为0如果第一次执行command1时退出状态就不为0,那么do和done之间的命令可能根本不执行72特制分析while命令应用示例while循环通常跟shift命令结合使用,以处理命令行中键入的参数个数可变的情况编写whiledemo程序如下:

while[“$#”-ne0]do echo“$1” shiftdone执行:$chmod+xwhiledemo $./whiledemoabcshift命令使位置变量向下移($2到$1,$3到$2),

并且$#递减。73特制分析until命令until命令跟while很像,区别在于只要在until后面的命令退出状态不为0,循环就一直执行下去,其格式为:

untilcommand1 do command done跟while命令一样,如果第一次执行command1时返回的退出状态为0,do和done之间的命令可能跟本不会执行。

74特制分析until命令示例程序编辑untildemo程序如下:

if["$#"-ne1]thenecho"Usage:untildemouser"exit1fiuntilwho|grep"$1">/dev/nulldosleep10doneecho"$1hasloggedon"执行:$chmod+xuntildemo $./untildemobc $./untildemo123结束进程:ctrl+C75特制分析break命令与continue命令break命令与continue命令与C中相应命令功能相同break命令只退出循环而不退出程序continue命令不退出循环,只跳过循环体后面的命令,而后循环像正常情况一样继续执行

76特制分析函数的定义和调用和"真正的"编程语言一样,Bash也有函数,虽然在某些实现方面稍有些限制.一个函数是一个子程序,用于实现一串操作的代码块(codeblock),它是完成特定任务的"黑盒子".当有重复代码,当一个任务只需要很少的修改就被重复几次执行时,这时你应考虑使用函数.其定义格式如下:

funcname()

{

command

...

command

}函数被调用或被触发,只需要简单地用函数名调用.77特制分析简单函数的例子

#!/bin/bashfun(){if[-z"$1"]#第一个参数是否长度为零?thenecho"-Parameter#1iszerolength.-"#则没有参数传递进来.elseecho"-Param#1is\"$1\".-"fi}funfun“hello”78特制分析综合实验一:清除log文件

cleanlog.sh版本1

在一个最简单的例子中,一个shell脚本其实就是将一堆系统命令列在一个文件中。好处就是把所有命令都放在一个脚本中,不用每次都敲它们.这样,对于特定的应用来说,这个脚本就很容易被修改或定制。在这次练习中,我们编写一个最简单的脚本,其内容是清除/var/log/message和/var/log/wtmp中的内容,如下。

cd/var/log

cat/dev/null>messages

cat/dev/null>wtmp

echo"Logscleanedup."79特制分析综合实验一:清除log文件

cleanlog.sh版本2下面按照Shell编程的一些规则进行改良:在第一行添加一个Bash脚本的正确的开头部分,指定解释器为bash。使用变量指定/var/log目录,在后面使用这个变量。最后用exit正常退出。使用注释说明各部分的用法。80特制分析综合实验一:清除log文件#!/bin/bash#一个Bash脚本的正确的开头部分.#要使用root身份来运行.#在此处插入代码,来打印错误消息,并且在不是root身份的时候退出.LOG_DIR=/var/log#使用变量比把代码写死的好.cd$LOG_DIRcat/dev/null>messagescat/dev/null>wtmpecho"Logscleanedup.“exit#这个命令是一种正确并且合适的退出脚本的方法.81特制分析综合实验一:清除log文件cleanlog.sh版本3

现在,让我们来编写有真正意义的脚本:添加权限有关语句,判断执行脚本的是否根用户,如果不是则输出出错信息,退出。添加语句,判断是否有命令行参数,如果有,假设是n,在后面的清除log的时候保留最后的n行;如果没有,设n=50。你可以不断地找到新的方法来完善这个脚本,并提高效率。82特制分析综合实验一:清除log

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论