您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 项目/工程管理 > [LAMP兄弟连李明老师讲Linux].课件Shell编程
Shell编程李明E-mail/QQ:samlee@lampbrother.net课程大纲Shell编程语法Shell脚本调试Shell应用实例$catexample#!/bin/sh#Thisistoshowwhataexamplelookslike.echoOurfirstexampleecho#Thisinsertsanemptylineinoutput.echoWearecurrentlyinthefollowingdirectory./bin/pwdechoechoThisdirectorycontainsthefollowingfiles/bin/ls一个简单的shell程序shell结构:1.#!指定执行脚本的shell2.#注释行3.命令和控制结构创建shell程序的步骤:第一步:创建一个包含命令和控制结构的文件。第二步:修改这个文件的权限使它可以执行。使用chmodu+x第三步:执行./example(也可以使用“shexample”执行)一个简单的shell程序Shell变量变量:是shell传递数据的一种方法,用来代表每个取值的符号名。Shell有两类变量:临时变量和永久变量。临时变量是shell程序内部定义的,其使用范围仅限于定义它的程序,对其它程序不可见。包括:用户自定义变量、位置变量。永久变量是环境变量,其值不随shell脚本的执行结束而消失。用户自定义变量用户定义的变量由字母或下划线开头,由字母、数字或下划线序列组成,并且大小写字母意义不同。变量名长度没有限制。在使用变量值时,要在变量名前加上前缀“$”。设置和使用变量设置变量:习惯上用大写字母来命名变量。变量名只能以字母表中的字符开头,不能用数字。变量赋值:赋值号“=”两边应没有空格。定义时赋值,如NUM=1将一个命令的执行结果赋给变量,如:TIME=`date`将一个变量赋给另一个变量,如:A=$B使用echo命令查看变量值。例如:echo$A设置和使用变量列出所有的变量:#set包含多个字的变量:$NAME=MikeRon运行时出错,应改为:$NAME=“MikeRon”或$NAME=‘MikeRon’设置和使用变量单引号和双引号的区别:#$ABC=‘$NAMEJunior’#echo$ABC$NAMEJunior单引号之间的内容原封不动地指定给了变量。删除变量:#unsetNAME位置变量和特殊变量Shell解释执行用户命令时,将命令行的第一个部分作为命令名,其它部分作为参数。由出现在命令行上的位置确定的参数称为位置参数。例如:ls-lfile1file2file3$0这个程序的文件名ls-l$n这个程序的第n个参数值,n=1-9特殊变量$*这个程序的所有参数$#这个程序的参数个数$$这个程序的PID$!执行上一个后台命令的PID$?执行上一个命令的返回值Shell命令read命令:从键盘读入数据,赋给变量如:readUSERNAMEread命令read的例子:#!/bin/shreadfirstsecondthirdechothefirstparameteris$firstechothesecondparameteris$second”echothethirdparameteris$thirdexpr命令Shell变量的算术运算:expr命令:对整数型变量进行算术运算例如:expr3+5expr$var1-5expr$var1/$var2expr$var3\*10复杂的expr命令复杂的运算:expr`expr5+7`/$var4将运算结果赋予变量:var4=`expr$var1/$var2`expr命令#!/bin/sha=10b=20c=30value1=`expr$a+$b+$c`echoThevalueofvalue1is$value1value2=`expr$c/$b`echoThevalueofvalue2is$value2value3=`expr$c\*$b`echoThevalueofvalue3is$value3value4=`expr$a+$c/$b`echoThevalueofvalue4is$value4变量测试语句变量测试语句:用于测试变量是否相等、是否为空、文件类型等。格式:test测试条件测试范围:整数、字符串、文件变量测试语句字符串测试:teststr1=str2测试字符串是否相等teststr1!=str2测试字符串是否不相等teststr1测试字符串是否不为空test-nstr1测试字符串是否不为空test-zstr1测试字符串是否为空变量测试语句整数测试:testint1-eqint2测试整数是否相等testint1-geint2测试int1是否=int2testint1-gtint2测试int1是否int2testint1-leint2测试int1是否=int2testint1-ltint2测试int1是否int2testint1-neint2测试整数是否不相等变量测试语句文件测试:test-dfile指定文件是否目录test-ffile指定文件是否常规文件test-xfile指定文件是否可执行test-rfile指定文件是否可读test-wfile指定文件是否可写test-afile指定文件是否存在test-sfile文件的大小是否非0变量测试语句变量测试语句一般不单独使用,一般做为if语句的测试条件,如:iftest-d$1then…fi变量测试语句可用[]进行简化,如test-d$1等价于[-d$1]变量测试语句#!/bin/shif[$#-ne2];thenechoNotenoughparametersexit0fiif[$1-eq$2];thenecho$1equals$2elif[$1-lt$2];thenecho$1littlerthan$2elif[$1-gt$2];thenecho$1greaterthan$2fi流控制语句流控制语句:用于控制shell程序的流程exit语句:退出程序执行,并返回一个返回码,返回码为0表示正常退出,非0表示非正常退出。例如:exit0流控制语句if语句的流程图流控制语句if…then…fi语句,例如:#!/bin/shif[-x/etc/rc.d/init.d/httpd]then/etc/rc.d/init.d/httpdrestartfi流控制语句if/else语句的流程图流控制语句更复杂的if语句:if条件1then命令1elif条件2then命令2else命令3fi流控制语句:if/else嵌套的流程图流控制语句多个条件的联合:-a:逻辑与,仅当两个条件都成立时,结果为真。-o:逻辑或,两个条件只要有一个成立,结果为真。流控制语句echopleaseinputafilename:readfile_nameif[-d$file_name]thenecho$file_nameisadirectoryelif[-f$file_name]thenecho$file_nameisacommonfileelif[-c$file_name-o-b$file_name]thenecho$file_nameisadevicefile“elseecho$file_nameisanunknownfilefi流控制语句for…done语句格式:for变量in名字表do命令列表done流控制语句例子:#!/bin/shforDAYinSundayMondayTuesdayWednesdayThursdayFridaySaturdaydoechoThedayis:$DAYdone流控制语句select变量in关键字docommand1......commandndoneselect把关键字中的每一项做成类似表单,以交互的方式执行do和done之间的命令。流控制语句case…esac语句,格式:case变量in字符串1)命令列表1;;...字符串n)命令列表n;;esac流控制语句流控制语句while语句,格式:while条件do命令done流控制语句#!/bin/shnum=1while[$num-le10]doSUM=`expr$num\*$num`echo$SUMnum=`expr$num+1`done流控制语句until语句,格式:until条件do命令doneuntil类似while循环,不同的是until是条件返回值为假时才继续执行。流控制语句跳出循环:break和continuebreak:跳出整个循环continue:跳过本次循环,进行下次循环流控制语句shift指令:参数左移,每执行一次,参数序列顺次左移一个位置,$#的值减1,用于分别处理每个参数,移出去的参数不再可用流控制语句#!/bin/shif[$#-le0]thenechoNotenoughparametersexit0fisum=0while[$#-gt0]dosum=`expr$sum+$1`shiftdoneecho$sum函数应用函数的定义:函数名(){命令序列}函数的调用:不带()函数名参数1参数2…函数中的变量:变量均为全局变量,没有局部变量函数中的参数:调用函数时,可以传递参数,在函数中用$1、$2…来引用函数应用Shell脚本调试sh-xscript这将执行该脚本并显示所有变量的值。sh-nscript不执行脚本只是检查语法的模式,将返回所有语法错误。awk命令应用awk-F域分隔符‘命令’示例:1、检测系统中UID为0的用户awk-F:'$3==0{print$1}'/etc/passwd2、检测系统中密码为空的用户awk-F:'length($2)==0{print$1}'/etc/shadow知识点总结掌握Shell编程的基本语法掌握结合系统命令编写应用脚本掌握Shell编程调试命令谢谢
本文标题:[LAMP兄弟连李明老师讲Linux].课件Shell编程
链接地址:https://www.777doc.com/doc-5107244 .html