Shell脚本编程基础知识课件.pptx

上传人(卖家):晟晟文业 文档编号:3790628 上传时间:2022-10-13 格式:PPTX 页数:74 大小:216.14KB
下载 相关 举报
Shell脚本编程基础知识课件.pptx_第1页
第1页 / 共74页
Shell脚本编程基础知识课件.pptx_第2页
第2页 / 共74页
Shell脚本编程基础知识课件.pptx_第3页
第3页 / 共74页
Shell脚本编程基础知识课件.pptx_第4页
第4页 / 共74页
Shell脚本编程基础知识课件.pptx_第5页
第5页 / 共74页
点击查看更多>>
资源描述

1、主要内容和学习要求q 掌握创建 shell 脚本的基本步骤q 学会使用条件测试q 掌握 if 条件结构与 case 选择结构q 掌握 for 循环、while 循环和 until 循环结构q 学会 shift 命令的使用q 学会 shell 脚本的调试第1页/共74页q Shell 脚本Shell 脚本 如果有一系列你经常使用的Linux命令,你可以把它们存储在一个文件里,shell可以读取这个文件并顺序执行其中的命令,这样的文件被称为脚本文件。shell 脚本按行解释。第2页/共74页q Shell 脚本的编写l Shell 脚本是纯文本文件,可以使用任何文本编辑器编写l Shell 脚本通

2、常是以.sh 作为后缀名q Shell 脚本的执行chmod+x script_name./script_namebash script_name第3页/共74页u 第一行:指定用哪个程序来编译和执行脚本。q Shell 脚本的格式#!/bin/bashu 可执行语句和 shell 控制结构u 注释:以“#”开头,可独占一行,或跟在语句的后面。Shell 脚本#!/bin/sh#!/bin/csh一个 shell 脚本通常由一组 Linux 命令、shell 命令、控制结构和注释语句构成。在脚本中多写注释语句是一个很好的编程习惯 第4页/共74页#!/bin/bash#This is the

3、first Bash shell program#ScriptName:greetings.shechoecho e Hello$LOGNAME,cecho its nice talking to you.echo Your present working directory is:pwd#Show the name of present directoryechoecho e The time is date+%T!.nByeechobash greetings.shchmod+x greetings.sh./greetingsShell 脚本举例第5页/共74页echo命令 功能说明:显示

4、文字。语 法:echo-ne字符串 或 echo-help-version 补充说明:echo会将输入的字符串送往标准输出。输出的字符串间以空白字符隔开,并在最后加上换行号。-n 不进行换行-e 若字符串中出现以下字符,则特别加以处理,而不会将它当成一般文字输出 n 换行 b 空格.第6页/共74页参 数:-n 不要在最后自动换行 -e 若字符串中出现以下字符,则特别加以处理,而不会将它当成一般文字输出:a 发出警告声;b 删除前一个字符;c 最后不加上换行符号;f 换行但光标仍旧停留在原来的位置;n 换行且光标移至行首;r 光标移至行首,但不换行;t 插入tab;v 与f相同;插入字符;nn

5、n 插入nnn(八进制)所代表的ASCII字符;-help 显示帮助 -version 显示版本信息第7页/共74页#!/bin/bash#This script is to test the usage of read#Scriptname:ex4read.shecho=examples for testing read=echo-e What is your name?cread nameecho Hello$nameechoecho-n Where do you work?readecho I guess$REPLY keeps you busy!echoread-p Enter you

6、r job title:#自动读给REPLYecho I thought you might be an$REPLY.echoecho=End of the script=Shell 脚本举例第8页/共74页read命令 read variable#读取变量给variable read x y#可同时读取多个变量 read#自动读给REPLY read p“Please input:”#自动读给REPLY第9页/共74页u 状态变量$?中保存命令退出状态的值grep$USER/etc/passwdecho$?grep hello/etc/passwd;echo$?条件测试u 条件测试可以根据某

7、个特定条件是否满足,来选择执行相应的任务。u Bash 中允许测试两种类型的条件:命令成功或失败,表达式为真或假u 任何一种测试中,都要有退出状态(返回值),退出状态为 0 表示命令成功或表达式为真,非0 则表示命令失败或表达式为假。第10页/共74页q 内置测试命令 testl 通常用 test 命令来测试表达式的值x=5;y=10test$x-gt$yecho$?l test 命令可以用 方括号 来代替x=5;y=10$x-gt$y echo$?q 表达式测试包括字符串测试、整数测试和文件测试。测试表达式的值方括号前后要留空格!第11页/共74页name=Tom$name=Tt?echo$

8、?l 2.x 版本以上的 Bash 中可以用双方括号来测试表达式的值,此时可以使用通配符进行模式匹配。测试表达式的值$name=Tt?echo$?第12页/共74页q 字符串测试-z str 如果字符串 str 长度为 0,返回真-n str 如果字符串 str 长度不为 0,返回真 str1=str2 两字符串相等 str1!=str2 两字符串不等name=Tom;-z$name;echo$?操作符两边必须留空格!字符串测试name2=Andy;$name=$name2 ;echo$?第13页/共74页q 整数测试,即比较大小 int1-eq int2 int1 等于 int2 int1-

9、ne int2 int1 不等于 int2 int1-gt int2 int1 大于 int2 int1-ge int2 int1 大于或等于 int2 int1-lt int2 int1 小于 int2 int1-le int2 int1 小于或等于 int2x=1;$x-eq 1;echo$?x=a;$x-eq 1;echo$?整数测试操作符两边必须留空格!X第14页/共74页q 整数测试也可以使用 let 命令或双圆括号x=1;let$x=1;echo$?x=1;($x+1=2);echo$?只能用于整数测试!整数测试l 相应的操作符为:=、!=、=、y);then echo x is

10、larger than yelif(x=y);then echo x is equal to yelse echo x is less than yfi第22页/共74页chkperm.sh#!/bin/bash#Using the old style test command:#filename:perm_check.sh#file=testingif -d$file then echo$file is a directory elif -f$file then if -r$file-a-w$file-a-x$file then#nested if command echo You have

11、 read,write,and execute permission on$file.fielse echo$file is neither a file nor a directory.fi第23页/共74页chkperm2.sh#!/bin/bash#Using the new style test command:#filename:perm_check2.sh#file=./testingif -d$file then echo$file is a directory elif -f$file then if -r$file&-w$file&-x$file then#nested if

12、 command echo You have read,write,and execute permission on$file.fielse echo$file is neither a file nor a directory.fi第24页/共74页name_grep#!/bin/bash#filename:name_grep#name=Tomif grep$name/etc/passwd&/dev/null then :else echo$name not found in/etc/passwd exit 2fi第25页/共74页tellme#!/bin/bashecho-n How o

13、ld are you?read ageif$age-lt 0-o$age-gt 120 thenecho Welcome to our planet!exit 1 fiif$age-ge 0-a$age-le 12 thenecho Children is the flowers of the countryelif$age-gt 12-a$age-le 19 thenecho Rebel without a causeelif$age-gt 19-a$age-le 29 then echo You got the world by the tail!elif$age-ge 30-a$age-

14、le 39 thenecho Thirty something.elseecho Sorry I askedfi第26页/共74页tellme2#!/bin/bashecho-n How old are you?read ageif(age 120)thenecho Welcome to our planet!exit 1 fiif(age=0&age=13&age=19&age=30&age 0)#or$#-gt 0 do echo$*shiftdone第50页/共74页shft.sh#!/bin/bash#Using shift to step through all the positi

15、onal parameters.until -z$1#Until all parameters used up.do echo$1 shiftdoneecho#Extra line feed.exit 0第51页/共74页q 生成随机数的特殊变量echo$RANDOM 范围是:0,32767q expr:通用的表达式计算命令表达式中参数与操作符必须以空格分开,表达式中的运算可以是算术运算,比较运算,字符串运算和逻辑运算。expr 5%3expr 5*3#乘法符号必须被转义随机数和 expr 命令第52页/共74页q 字符串操作$#var返回字符串变量返回字符串变量 var 的长度的长度$var

16、:m返回返回$var中从中从第第m个字符到最后个字符到最后的部分的部分$var:m:len返回返回$var中从中从第第m个字符开始,长度为个字符开始,长度为len的部分的部分$var#pattern删除删除$var中中开头开头部分与部分与pattern匹配的匹配的最小最小部分部分$var#pattern 删除删除$var中中开头开头部分与部分与pattern匹配的匹配的最大最大部分部分$var%pattern删除删除$var中中结尾结尾部分与部分与pattern匹配的匹配的最小最小部分部分$var%pattern 删除删除$var中中结尾结尾部分与部分与pattern匹配的匹配的最大最大部分部

17、分$var/old/new用用new替换替换$var中第一次出现的中第一次出现的old$var/old/new 用用new替换替换$var中所有的中所有的old(全局替换全局替换)注:pattern,old 中可以使用通配符。例:ex4strm 的取值从 0 到$#var-1字符串操作第53页/共74页ex4str#!/bin/bashdirname=/usr/bin/local/bin;echo dirname=$dirnameecho-n$#dirname=;sleep 4;echo$#dirnameechoecho-n$dirname:4=;sleep 4;echo$dirname:4e

18、choecho-n$dirname:8:6=;sleep 4;echo$dirname:8:6echoecho-n$dirname#*bin=;sleep 4;echo$dirname#*binechoecho-n$dirname#*bin=;sleep 4;echo$dirname#*binechoecho-n$dirname%bin=;sleep 4;echo$dirname%binechoecho-n$dirname%bin=;sleep 4;echo$dirname%binechoecho-n$dirname%bin*=;sleep 4;echo$dirname%bin*echoech

19、o-n$dirname%bin*=;echo$dirname%bin*echoecho-n$dirname/bin/sbin=;echo$dirname/bin/sbinechoecho-n$dirname/bin/lib=;echo$dirname/bin/libechoecho-n$dirname/bin*/lib=;echo$dirname/bin*/lib第54页/共74页sh x 脚本名该选项可以使用户跟踪脚本的执行,此时 shell 对脚本中每条命令的处理过程为:先执行替换,然后显示,再执行它。shell 显示脚本中的行时,会在行首添加一个加号“+”。sh v 脚本名在执行脚本之前

20、,按输入的原样打印脚本中的各行,打印一行执行一行。sh n 脚本名对脚本进行语法检查,但不执行脚本。如果存在语法错误,shell 会报错,如果没有错误,则不显示任何内容。脚本调试第55页/共74页编程小结:变量q 局部变量、环境变量(export、declare-x)q 只读变量、整型变量例:declare-i x;x=hello;echo$x0q 位置参量($0,$1,.,$*,$,$#,$,$?)q 变量的间接引用(eval,$!str)例:name=hello;x=name;echo$!xhelloq 命令替换(cmd、$(cmd))q 整数运算 declare 定义的整型变量可以直接进

21、行运算,否则需用 let 命令或$.、$(.)进行整数运算。第56页/共74页编程小结:输入输出q 输入:readread var1 var2.readread p 提示q 输出:printfprintf%-12.5f t%d n 123.45 8format以%开头flagfield widthprecision格式符-:左对齐+:输出符号0:空白处添0空格:前面加一空格字段宽度小数点后输出位数cdefgsoxbnrtv”%REPLY REPLY输出参数用空格隔开第57页/共74页q 字符串测试编程小结:条件测试-z string 如果字符串如果字符串string长度为长度为0,返回真,返回

22、真-n string 如果字符串如果字符串string长度不为长度不为0,返回真,返回真 str1=str2 两字符串相等(也可以使用两字符串相等(也可以使用=)str1!=str2 两字符串不等两字符串不等操作符两边必须留空格!str1=str2 两字符串相等(也可以使用两字符串相等(也可以使用=)str1!=str2 两字符串不等两字符串不等 str1 str2 str1大于大于str2,按按ASCII码比较码比较 str1 Tom;echo$?第58页/共74页编程小结:条件测试q 整数测试 int1-eq int2 int1 等于等于 int2 int1-ne int2 int1 不等

23、于不等于 int2 int1-gt int2 int1 大于大于 int2 int1-ge int2 int1 大于或等于大于或等于 int2 int1-lt int2 int1 小于小于 int2 int1-le int2 int1 小于或等于小于或等于 int2注意这两种方法的区别!int1=int2 int1 等于等于 int2int1!=int2 int1 不等于不等于 int2int1 int2 int1 大于大于 int2int1=int2 int1 大于或等于大于或等于 int2int1 int2 int1 小于小于 int2int1 echo-ARE-echo echo let

24、 i+=1 done#Now,call the functions.funexit 0第66页/共74页ex4fun3.sh#f1#Will give an error message,since function f1 not yet defined.#declare-f f1#This doesnt help either.#f1#Still an error message.#However.f1()echo Calling function f2 from within function f1.f2f2()echo Function f2.#f1#Function f2 is not

25、actually called until this point#although it is referenced before its definition.#This is permissible.第67页/共74页q 向函数传递参数函数的调用例:ex4fun4.shq 函数与命令行参数例:ex4fun5.shq return 与 exit例:ex4fun6.sh第68页/共74页向函数传递参数 例:ex4fun4.sh#!/bin/bash#Functions and parametersDEFAULT=default#Default param value.func2()if -z$

26、1#Is parameter#1 zero length?then echo-Parameter#1 is zero length-else echo-Param#1 is$1-fivariable=$1:-$DEFAULT echo variable=$variable if -n$2 then echo-Parameter#2 is$2-fireturn 0第69页/共74页echoecho Nothing passedfunc2#Called with no paramsechoecho One parameter passed.func2 first#Called with one p

27、aramechoecho Two parameters passed.func2 first second#Called with two paramsechoecho second passed.func2 second#The first parameter is of zero?lengthecho exit 0#End of script 第70页/共74页函数与命令行参数 例:ex4fun5.sh#!/bin/bash#function and command line arguments#Call this script with a command line argument,#

28、something like$0 arg1.func()echo$1echo First call to function:no arg passed.echo See if command-line arg is seen.Func#No!Command-line arg not seen.echo =echoecho Second call to function:command-line arg passed explicitly.func$1#Now its seen!exit 0第71页/共74页 return 与 exit 例:ex4fun6.sh#!/bin/bash#purpo

29、se:Maximum of two integers.max2()#Returns larger of two numbers.if -z$2 then echo Need to pass two parameters to the function.exit 1 fi if$1=$2#$1-eq$2 then echo The two numbers are equal.exit 0 else if$1-gt$2 then return$1 else return$2 fi fi第72页/共74页read num1 num2echo num1=$num1,num2=$num2max2$num1$num2return_val=$?echo The larger of the two numbers is:$return_val.exit 0第73页/共74页谢谢您的观看!第74页/共74页

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 办公、行业 > 各类PPT课件(模板)
版权提示 | 免责声明

1,本文(Shell脚本编程基础知识课件.pptx)为本站会员(晟晟文业)主动上传,163文库仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。
2,用户下载本文档,所消耗的文币(积分)将全额增加到上传者的账号。
3, 若此文所含内容侵犯了您的版权或隐私,请立即通知163文库(发送邮件至3464097650@qq.com或直接QQ联系客服),我们立即给予删除!


侵权处理QQ:3464097650--上传资料QQ:3464097650

【声明】本站为“文档C2C交易模式”,即用户上传的文档直接卖给(下载)用户,本站只是网络空间服务平台,本站所有原创文档下载所得归上传人所有,如您发现上传作品侵犯了您的版权,请立刻联系我们并提供证据,我们将在3个工作日内予以改正。


163文库-Www.163Wenku.Com |网站地图|