Linux教程ch4Shell程序设计课件_第1页
Linux教程ch4Shell程序设计课件_第2页
Linux教程ch4Shell程序设计课件_第3页
Linux教程ch4Shell程序设计课件_第4页
Linux教程ch4Shell程序设计课件_第5页
已阅读5页,还剩40页未读 继续免费阅读

下载本文档

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

文档简介

1、第四章第四章 Shell Linux的的shell 内核 csh bashXwindow 其他程序 shell是用户和系统内核之间的接口程序是用户和系统内核之间的接口程序 shell是命令解释器是命令解释器 在本章中,在本章中,shell指指Linux的终端的终端 即解释用户命令和即解释用户命令和shell程序的文字终端程序的文字终端 shell命令的特点及用途命令的特点及用途 n shell程序可以认为是将程序可以认为是将shell命令按照控制结构组织到一个命令按照控制结构组织到一个 文本文件中,文本文件中, 批量交给批量交给shell去执行;去执行; n 不同的不同的shell解释器使用不

2、同的解释器使用不同的shell命令语法命令语法; n shell程序解释执行,不生成可以执行的二进制文件程序解释执行,不生成可以执行的二进制文件; n 可以帮助用户完成特定的任务,提高使用、维护系统的效率可以帮助用户完成特定的任务,提高使用、维护系统的效率; n 了解了解shell程序可以更好的配置和使用程序可以更好的配置和使用Linux; n 适合于编写执行相对简单的任务的工具,因为它更强调易于配置、维护和适合于编写执行相对简单的任务的工具,因为它更强调易于配置、维护和 可移植性可移植性;不适合用来完成时间紧迫型和处理器忙碌型的任务不适合用来完成时间紧迫型和处理器忙碌型的任务. n 通过通过

3、cat /ect/shells命令查看安装的命令查看安装的shell. shell程序的功能是将命令序列(date ls -l) 组合并由系统自 动执行。 文件交给系统执行可用三种方式实现: n 利用输入输出重定向 $ sh / if-z ls -a $DIREC then echo “$DIREC is indeed empty” else echo “$DIREC is not empty” fi 运行: $ testdir dirname 例3:考虑一个实际应用问题: 设有一个连续运行系统,每当运行中遇到错误时,创建一 个文件errorfile并将错误信息写入其中;要求我们编写一段 sh

4、ell程序生成错误日志文件,即写一个名为checkerr程序, 每小时运行一次记录这些错误。 实现方案: 如果errorfile存在,checkerr把日期、时间、错误信息一同记入datelog 文件中,然后删除errorfile ;若errorfile不存在,则记下日期、时间并给 出无错误提示一并写入datelog中。 #!/bin/sh # 例题 checkerr.sh date datelog if test -r errorfile then cat errorfile datelog rm errorfile else echo “No error this hour”datelog

5、 fi 程序编码: 2)case语句 语法:case word in pattern -1) pat1 -list1; pattern -2) pat2 -list2; *) default -list; esac 其中:word将与各匹配模式比较,“;”符表示匹配结束, “*”号为通配符。 例1:向指定的文件中添加文本 #! /bin/sh # case $# in 1) cat $1; 2) cat$2$1; *) echo usage: append.sh from to ; esac 执行:$ append.sh file1 $ append.sh file1 file2 # !/bi

6、n/sh # 练习 wh.sh # case 结构 hour= date+%H case $hour in 01-9|101) echo “Good morning!”; 1234567) echo “Good afternoon!”; *) echo “Good evening!”; esac 例2:写一段根据一天中不同时间给出问候信息的程序 例3:用case语句测试命令行变量,完成不同的工作内容. # !/bin/sh echo “Enter your option and hit :c” read option case “$option” in d) date; l) ls; w) w

7、ho; q) exit 0; *) echo “invalid option; try running the program again.” exit 1; esac exit 0 5. 循环语句 循环语句完成命令的重复执行 1)for 循环 语法:for var in word1 word2 wordn do commands done for 循环中可根据需要进行嵌套 例1:列出用户注册目录下的cc和work子目录中所有 * .c文件。 # !/ bin/sh # 显示.c文件 cd $HOME for dir in cc work do echo “.in $dir.” cd $dir

8、 for file in *.c do ls -l $file done cd done 2) while 循环 以命令表的出口状态为判别条件,决定循环体中的 命令是否执行。语法结构: while cmdlist1 do cmdlist2 done 例1:#!/bin/sh # while.sh while -r filea do echo before sleep sleep 5 echo sleep done done 例2:#! /bin/sh # c VAL=1 while $VAL -lt 11 do touch VAL=expr $VAL+1 done 例2中几个新内容: 命令to

9、uch的功能:改变文件访问权限和修改时间, 用法:touch选项 时间 文件名;若指出的文件名不 存在时,则创建具有缺省权限及当前时间的文件。 expr 的用法:将实参作为表达式求值的一种方法 $ count=0 $ count=expr $count+1 (用 count =$count +1 不行) $ echo $count 另外while循环中还可以使用: break-退出当前所在的整个循环 continue-结束本轮循环,转到下一轮循环的开始 在while循环中的cmdlist1的设计要注意不能发生死循环. 6. 读取标准输入语句 将标准输入的值存入到变量中用read命令. 例: #

10、 the read command example echo “enter you name:c” read name echo “your name is $name” read 命令中的参数说明: read word1word2rest 存放方式为:第一,第二,其余参数 例:read 命令参数使用 # test read command, echo “give me a long sentence:c” read word1 word2 rest echo “$word1n $word2n $rest” echo “end of my act” 运行: $ read_test give m

11、e a long sentence: 输入:lets test the read command. 输出:lets test the read command end od my act 7. 函数 function funname () action; return int; 说明: 1、可以带function fun() 定义,也可以直接fun() 定义,不 带任何参数。 2、参数返回,可以显示加:return 返回,如果不加,将 以最后一条命令运行结果,作为返回值。 return后跟数值 n(0-255) 。 例:testfun.sh fun() if test f $1 then re

12、turn 11 elif test d $1 then return 12 else return 13 fi echo “Using fun()” fun $1 echo $? 运行: $ sh testfun.sh /bin bash的内部命令的内部命令 echo eval exec export readonly read Shift wait exit 7. Shell 程序的调试 1)交互调试 先用命令验证,再引入shell编程中 2)在编辑过程中执行程序 打开多个窗口,边编辑边执行 3)用shell程序跟踪执行 使用shell的 -v,-x选项可对shell程序进行跟踪 $ sh

13、-v test.sh $sh -x test.sh 练习题练习题 1用用Shell编程,判断一个文件是不是字符设备文件,如果是将其拷贝到编程,判断一个文件是不是字符设备文件,如果是将其拷贝到 /dev 目录下,否则提示目录下,否则提示“This not exit”的信息。的信息。 2写一条命令,搜索文件写一条命令,搜索文件/etc/passwd中的含有字符串中的含有字符串“sarwar”的行,的行, 并把这些行排序后输出到文件并把这些行排序后输出到文件passwd.sarwar中。中。 3设计一个设计一个Shell程序,在程序,在/userdata目录下建立目录下建立50个目录,即个目录,即u

14、ser1 user50,并设置每个目录的权限为可执行权限。,并设置每个目录的权限为可执行权限。 4请定义一个函数,其功能是:提示用户输入一个数,如果输入的数不请定义一个函数,其功能是:提示用户输入一个数,如果输入的数不 是正数,则提示用户输入的数据有误,并提示用户重新输入,直到用户是正数,则提示用户输入的数据有误,并提示用户重新输入,直到用户 输入的数为正数时,提示输入数据正确,并将该输入数据加上输入的数为正数时,提示输入数据正确,并将该输入数据加上100后将后将 结果显示出来,同时显示系统的时间。结果显示出来,同时显示系统的时间。 练习题练习题 5阅读下面阅读下面shell程序,请写出执行结果。程序,请写出执行结果。 paramtest #!/bin/bash echo A:$0 echo B:$* echo C:$# echo D:$2 shift echo E:$# echo F:$2 set Happy New Year, everyone echo G:$* 1. !/bin/sh “Input :” read if -c $ then cp $ /dev else echo “This not exit!” fi 2. grep “sarwar” passwd.sarwar 3. #!/bin/sh i=1 while i -le 50 do i

温馨提示

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

评论

0/150

提交评论