Shell 编程.ppt

上传人:asd****56 文档编号:87679367 上传时间:2023-04-16 格式:PPT 页数:41 大小:344KB
返回 下载 相关 举报
Shell 编程.ppt_第1页
第1页 / 共41页
Shell 编程.ppt_第2页
第2页 / 共41页
点击查看更多>>
资源描述

《Shell 编程.ppt》由会员分享,可在线阅读,更多相关《Shell 编程.ppt(41页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。

1、1编写、权限修改和执行编写、权限修改和执行shell程序的步骤程序的步骤 qShell编程有很多类似C语言和其他程序设计语言的特征,但是又没有编程语言那样复杂。Shell程序是指放在一个文件中的一系列Linux命令和实用程序,在执行的时候,通过Linux操作系统一个接着一个地解释和执行每条命令。2编写、权限修改和执行编写、权限修改和执行shell程序的步骤程序的步骤1.编辑编辑shell程序程序q编辑一个内容如下的源文件,文件名为date,可将其存放在目录/bin下。rootlocalhost bin#vi date#!/bin/sh echo Mr.$USER,Today is:echo&d

2、ate +%B%d%Aecho Whish you a lucky day!q注意:#!/bin/sh通知采用bash解释,在echo语句中执行shell命令date,在date命令前加符号“&”,%B%d%A为输出格式控制符。3编写、权限修改和执行编写、权限修改和执行shell程序的步骤程序的步骤2.建立可执行的二进制程序建立可执行的二进制程序q编辑完该文件之后不能立即执行该文件,需给文件设置可执行权限。使用如下命令:chmod+x date4编写、权限修改和执行编写、权限修改和执行shell程序的步骤程序的步骤3.执行shell程序 q方法(1)rootlocalhost bin#./da

3、te Mr.root,Today is:二月06星期二Wish you a lucky day!q方法(2)另外一种执行date的方法就是把它作为一个参数传给shell命令:rootlocalhost bin#bash dateMr.root,Today is:二月06星期二Wish you a lucky day!5编写、权限修改和执行编写、权限修改和执行shell程序的步骤程序的步骤q例3.1 编写一个shell程序,此程序的功能是:显示root下的文件信息,然后建立一个kk的文件夹,在此文件夹下新建一个文件aa,修改此文件的权限为可执行。分析:此shell程序中需要依次执行命令:1.进入

4、root目录:cd/root2.显示root目录下的文件信息:ls l3.新建文件夹kk:mkdir kk4.进入root/kk目录:cd kk5.新建一个文件aa:vi aa#编辑完成后需手工保存6.修改aa文件的权限为可执行:chmod+x aa7.回到root目录:cd/root6编写、权限修改和执行编写、权限修改和执行shell程序的步骤程序的步骤shell程序只是以上命令的顺序集合,假定程序名为mkf。rootlocalhost root#vi mkfcd/rootls lmkdir kkcd kkvi aa chmod+x aacd/root7在shell程序中使用的参数 1.位置

5、参数位置参数q由系统提供的参数称为位置参数。位置参数的值可以用$N得到,N是一个数字,如果为1,即$1.类似C语言中的数组,Linux会把输入的命令字符串分段并给每段进行标号,标号从0开始。第0号为程序名字,从1开始就表示传递给程序的参数。如$0表示程序的名字,$1表示传递给程序的第一个参数,以此类推。8在shell程序中使用的参数2.内部参数内部参数q上述过程中的$0是一个内部变量,它是必须的,而$1则可有可无,最常用的内部变量有$0、$#、$?、$*,它们的含义如下:q$0:命令含命令所在的路径q$#:传递给程序的总的参数数目q$?:shell程序在shell中退出的情况,正常退出返回0,

6、反之为非0值q$*:传递给程序的所有参数组成的字符串9在shell程序中使用的参数q例3.2 编写一个shell程序,用于描述shell程序中的位置参数$0、$#、$?、$*,程序名为test1,代码如下:rootlocalhost bin#vi test1#!/bin/sh echo Program name is$0;echo There are totally$#parameters passed to this program;echo The last is$?;echo The parameters are$*;注意:命令不计算在参数内。10在shell程序中使用变量 1.变量的赋

7、值q在shell编程中,所有的变量名都由字符串组成,并且您不需要对变量进行声明。q格式:变量名=值q注意:必须保证等号(=)前后没有空格。q例:x=6a=hello world11在shell程序中使用变量2.访问变量值 q如果要访问变量值,可以在变量前面加一个美元符号”$”,如:a=hello worldecho A is:$aq一个变量给另一个变量赋值可以写成:变量变量2=$变量变量1q例如:x=$ii+可以写成:i=$i+112在shell程序中使用变量3.键盘读入 q在shell程序设计中,变量的值可以作为字符串从键盘读入,其格式为:read 变量变量q例如:例如:read strre

8、ad为读入命令,它表示从键盘读入字符串到str13在shell程序中使用变量q例3.4 编写一个shell程序,程序执行时从键盘读入一个目录名,然后显示这个目录下所有文件的信息。分析:设存放目录的变量为DIRECTORY,其读入语句为:read DIRECTORY显示文件的信息命令为:ls alrootlocalhost bin#vi test3#!/bin/shecho please input name of directory read DIRECTORYcd$DIRECTORYls l(2)设置权限:rootlocalhost bin#chmod+x test3(3)执行:rootlo

9、calhost bin#./test214在shell程序中使用变量q例3.5 运行程序test3,从键盘读入x、y的值,然后做加法运算,最后输出结果。(1)用vi编辑程序rootlocalhost bin#vi test3#!/bin/shread x yz=expr$x+$yecho The sum is$z(2)设置权限:rootlocalhost bin#chmod+x test3(3)执行:rootlocalhost bin#./test345 78The sum is 12315表达式的比较1.字符串比较 q作用:测试字符串是否相等、长度是否为零,字符串是否为NULL。q常用的字符

10、串操作符:16表达式的比较q例3.6 从键盘读入两个字符串,判断这两个字符串是否相等,如相等输出。(1)用vi编辑程序rootlocalhost bin#vi test4#!/bin/bashread ar1 read ar2$ar1 =$ar2 echo$?#保存前一个命令的返回码(2)设置权限:rootlocalhost bin#chmod+x test4(3)执行:rootlocalhost root#./test4 aaabbb1注意注意:“”后面和后面和“”前面及前面及等号等号“=”的前后都应有一空的前后都应有一空格;格;17表达式的比较q例3.7 比较字符串长度是否大于零。(1)用

11、vi编辑程序rootlocalhost bin#vi test5#!/bin/bashread ar -n$ar echo$?#保存前一个命令的返回码(2)设置权限:rootlocalhost bin#chmod+x test5(3)执行:rootlocalhost root#./test50注意注意:运行结果运行结果1表示表示ar的小的小于等于零,于等于零,0表示表示ar的长度大的长度大于零。于零。18表达式的比较2.数字比较 q在bash shell编程中的关系运算有别于其他编程语言。19表达式的比较q例38 比较两个数字是否相等。(1)用vi编辑程序rootlocalhost bin#v

12、i test6#!/bin/bashread x yif test$x -eq$y then echo“$x=$y”else echo“$x!=$y”fi(2)设置权限:rootlocalhost bin#chmod+x test6(3)执行:rootlocalhost bin#./test650 10050!=100rootlocalhost bin#./test6150 150150=15020表达式的比较3.逻辑操作 q逻辑运算符号:21表达式的比较q例3.9 一个变量赋予一定的值,另一个为空,求两者的与、或。(1)用vi编辑程序rootlocalhost bin#vi test7#!/

13、bin/bashpart1=1111part2=#part2为空$part1 -a$part2 echo$?#保存前一个命令的返回码$part1 -o$part2 echo$?(2)设置权限:rootlocalhost bin#chmod+x test7(3)执行:rootlocalhost bin#./test71022表达式的比较4.文件操作文件操作q文件测试表达式通常是为了测试文件的信息,一般由脚本来决定文件是否应该备份、复制或删除。q常用操作符:23表达式的比较q例3.10 判断zb目录是否存在/root下。(1)用vi编辑程序rootlocalhost bin#vi test8#!/

14、bin/bash-d /root/zb echo$?#保存前一个命令的返回码(2)设置权限:rootlocalhost bin#chmod+x test8(3)执行:rootlocalhost bint#./test81(4)在/root添加zb目录rootlocalhost bin#mkdir zb(5)执行:rootlocalhost bin#./test80注意注意:运行结果运行结果1表示判断的表示判断的目录不存在,目录不存在,0表示判断的目表示判断的目录存在。录存在。24表达式的比较q例3.11 输入一个字符串,如果是目录,则显示目录下的信息,如为文件显示文件的内容。rootlocal

15、host bin#vi test9#!/bin/bashecho“Please enter the directory name or file name”read DORFif -d$DORF then ls$DORF elif -f$DORFthencat$DORFelse echo“input error!”fi25循环结构语句 1.for 循环 q语法:for 变量 in 列表 do 操作 doneq变量是要在循环内部用来指代列表中的对象。变量是要在循环内部用来指代列表中的对象。q列表是在for循环的内部要操作的对象,可以是字符串也可以是文件,如果是文件则为文件名。26循环结构语句 q

16、例3.12 在列表中的值:a,b,c,e,i,2,4,6,8用循环的方式把字符与数字分成两行输出。(1)用gedit编辑脚本程序test4rootlocalhost root#gedit test9#!/bin/shfor i in a,b,c,e,i 2,4,6,8 do echo$i done(2)设置权限:rootlocalhost bin#chmod+x test9(3)执行:rootlocalhost bin#./test9a,b,c,e,i2,4,6,8注意:在循环列表中注意:在循环列表中的空格可表示换行。的空格可表示换行。27循环结构语句 q例:删除垃圾箱中的所有文件分析:在本机

17、中拉圾箱的位置在$HOME/.Trash中,因而是删除$HOME/.Trash列表中的所有文件,程序脚本如下:(1)用gedit编辑脚本程序test10rootlocalhost bin#gedit test10#!/bin/shfor i in$HOME/.Trash/*do rm$i echo$i has been deleted!done(2)设置权限:rootlocalhost bin#chmod+x test10(3)执行:rootlocalhost bin#./test10/root/.Trash/abc has been deleted!/root/.Trash/abc1 has

18、 been deleted!28循环结构语句 q例:求从1到100的和。(1)用gedit编辑脚本程序test11rootlocalhost bin#gedit test11#!/bin/shtotal=0for(j=1;j=100;j+);do total=expr$total+$j doneecho The result is$total(2)设置权限:rootlocalhost bin#chmod+x test11(3)执行:rootlocalhost bin#./test11The result is 5050注意:注意:for语句中的双括号不能语句中的双括号不能省,最后的分号可有可无

19、,表达省,最后的分号可有可无,表达式式total=expr$total+$j的加的加号两边的空格不能省,否则会成号两边的空格不能省,否则会成为字符串的连接。为字符串的连接。29循环结构语句 2.while循环循环 q语法:while 表达式 do 操作 doneq只要while表达式为真,do和done之间的操作就一直会进行。30循环结构语句 q例:用while循环求1到100的和。(1)用gedit编辑脚本程序test12rootlocalhost bin#gedit test12 total=0 num=0 while(num=100);do total=expr$total+$num (

20、num+=1)done echo The result is$total(2)设置权限:rootlocalhost bin#chmod+x test12(3)执行:rootlocalhost bin#./test12The result is 505031循环结构语句 3.until循环循环q语法:until 表达式do操作doneq重复do和done之间的操作直到表达式成立为止。32循环结构语句q例:用until循环求1到100的和。(1)用gedit编辑脚本程序test13rootlocalhost bin#gedit test13total=0num=0until$num-gt 100

21、do total=expr$total+$num num=expr$num+1doneecho The result is$total(2)设置权限:rootlocalhost bin#chmod+x test13(3)执行:rootlocalhost bin#./test13The result is 505033条件结构语句 1.if语句语句q语法:if 表达式1 then操作elif 表达式2 then操作elif 表达式3 then操作else操作fiqLinux里的if的结束标志是将if反过来写成fi;而elif其实是else if的缩写q其中elif理论上可以有无限多个。34条件结

22、构语句 q例:用for循环输出1到10间的奇数。(1)用gedit编辑脚本程序test14rootlocalhost bin#gedit test14for(j=0;j=10;j+)do if($j%2=1)then echo$j fi done(2)设置权限:rootlocalhost bin#chmod+x test14(3)执行:rootlocalhost bin#./test141357935条件结构语句 2 case语句语句q语法:case 字符串 in值1|值2)操作;值3|值4)操作;值5|值6)操作;*)操作;esacqcase的作用就是当字符串与某个值相同是就执行那个值后面的

23、操作。如果同一个操作对于多个值,则使用|将各个值分开。在case的每一个操作的最后面都有两个;,分号是必须的。36条件结构语句 q例:Linux是一个多用户操作系统,编写一程序根据不同的用户登录输出不同的反馈结果。(1)用vi编辑脚本程序test15rootlocalhost bin#vi test15#!/bin/shcase$USER in beichen)echo You are beichen!;liangnian)echo You are liangnian;/注意这里只有一个分号 echo Welcome!;/这里才是两个分号 root)echo You are root!;ech

24、o Welcome!;/将两命令写在一行,用一个分号作为分隔符 *)echo Who are you?$USER?;esac37条件结构语句(2)设置权限:rootlocalhost bin#chmod+x test15(3)执行:rootlocalhost bin#./test15You are rootWelcome!38在shell脚本中使用函数 qshell程序也支持函数。函数能完成一个特定的功能,可以重复调用这个函数。q函数格式如下:函数名()函数体q函数调用方式为:函数名函数名 参数列表参数列表39在shell脚本中使用函数 q例:编写一函数add求两个数的和,这两个数用位置参数传

25、入,最后输出结果。(1)编辑代码rootlocalhost bin#vi test16#!/bin/shadd()a=$1 b=$2 z=expr$a+$b echo The sum is$zadd$1$2 (2)修改权限rootlocalhost bin#chmod+x test16(3)程序运行结果rootlocalhost bin#./test16 10 20The sum is 30注意:函数定义完成后必须同注意:函数定义完成后必须同时写出函数的调用,然后对此时写出函数的调用,然后对此文件进行权限设定,再执行此文件进行权限设定,再执行此文件。文件。40在在shell脚本中调用其他脚本中

26、调用其他shell脚本脚本 q在shell脚本的执行过程中,shell脚本支持调用另一个shell脚本,调用的格式为:程序名q例:在shell脚本test17中调用test18(1)编辑代码#test17脚本#!/bin/shecho The main name is$0./test18echo the first string is$1#test18脚本#!/bin/shecho How are you$USER?(2)修改权限rootlocalhost bin#chmod+x test17rootlocalhost bin#chmod+x test18(3)程序运行结果rootlocalh

27、ost bin#./test17 abc123The main name is./test17How are you root?the first string is abc12341在在shell脚本中调用其他脚本中调用其他shell脚本脚本q注意:(1)在Linux编辑中命令区分大小写字符。(2)在shell语句中加入必要的注释,以便以后阅读和维护,注释以#开头。(3)对shell变量进行数字运算时,使用乘法符号*时,要用转义字符进行转义。(4)由于shell对命令中多余的空格不进行任何处理,因此程序员可以利用这一特性调整程序缩进,达到增强程序可读性的效果。(5)在对函数命名时最好能使用有含义且容易理解的名字,即使函数名能够比较准确地表达函数所完成的任务。同时建议对于较大的程序要建立函数命名和变量命名对照表。

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

当前位置:首页 > 技术资料 > 其他杂项

本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知淘文阁网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

工信部备案号:黑ICP备15003705号© 2020-2023 www.taowenge.com 淘文阁