Shell脚本编程基础知识.ppt

上传人:知****量 文档编号:17285044 上传时间:2022-05-23 格式:PPT 页数:74 大小:244.50KB
返回 下载 相关 举报
Shell脚本编程基础知识.ppt_第1页
第1页 / 共74页
Shell脚本编程基础知识.ppt_第2页
第2页 / 共74页
点击查看更多>>
资源描述

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

1、Linux 操作系统Shell 脚本编程脚本编程主要内容和学习要求主要内容和学习要求q 掌握创建 shell 脚本的基本步骤q 学会使用条件测试q 掌握 if 条件结构与 case 选择结构q 掌握 for 循环、while 循环和 until 循环结构q 学会 shift 命令的使用q 学会 shell 脚本的调试q Shell 脚本Shell 脚本脚本n如果有一系列你经常使用的如果有一系列你经常使用的Linux命令,你可命令,你可以把它们存储在一个文件里,以把它们存储在一个文件里,shell可以读取这可以读取这个文件并顺序执行其中的命令,这样的文件被个文件并顺序执行其中的命令,这样的文件被

2、称为脚本文件。称为脚本文件。shell 脚本脚本按行解释。按行解释。q Shell 脚本的编写l Shell 脚本是纯文本文件,可以使用任何文本编辑器编写l Shell 脚本通常是以 .sh 作为后缀名q Shell 脚本的执行chmod +x script_name./script_namebash script_nameu 第一行:指定用哪个程序来编译和执行脚本。q Shell 脚本的格式脚本的格式#!/bin/bashu 可执行语句和 shell 控制结构u 注释:以 “ # ” 开头,可独占一行,或跟在语句的后面。Shell 脚本脚本#!/bin/sh#!/bin/csh一个 shel

3、l 脚本通常由一组 Linux 命令、shell 命令、控制结构和注释语句构成。在脚本中多写注释语句是一个很好的编程习惯 #!/bin/bash# This is the 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

4、 +%T!. nByeechobash greetings.shchmod +x greetings.sh./greetingsShell 脚本举例脚本举例echo命令n功能说明:显示文字。 n语 法:echo -ne字符串 或 echo -help-version n补充说明:echo会将输入的字符串送往标准输出。输出的字符串间以空白字符隔开, 并在最后加上换行号。n-n 不进行换行不进行换行n-e 若字符串中出现以下字符,则特别加以处理,而不会将它当成一般文字输出 n 换行换行 b 空格空格.参 数:n-n 不要在最后自动换行 n-e 若字符串中出现以下字符,则特别加以处理,而不会将它当成

5、一般文字输出:na 发出警告声; nb 删除前一个字符; nc 最后不加上换行符号; nf 换行但光标仍旧停留在原来的位置; nn 换行且光标移至行首; nr 光标移至行首,但不换行; nt 插入tab; nv 与f相同; n 插入字符; nnnn 插入nnn(八进制)所代表的ASCII字符; n-help 显示帮助 n-version 显示版本信息#!/bin/bash# This script is to test the usage of read# Scriptname: ex4read.shecho = examples for testing read =echo -e What

6、is your name? cread nameecho Hello $nameechoecho -n Where do you work? readecho I guess $REPLY keeps you busy!echoread -p Enter your job title: #自动读给自动读给REPLYecho I thought you might be an $REPLY.echoecho = End of the script =Shell 脚本举例脚本举例read命令命令nread variable #读取变量给读取变量给variablenread x y #可同时读取多个

7、变量可同时读取多个变量nread #自动读给自动读给REPLYnread p “Please input: ” #自动读给自动读给REPLYu 状态变量 $? 中保存命令退出状态的值grep $USER /etc/passwdecho $?grep hello /etc/passwd; echo $?条件测试条件测试u 条件测试可以根据某个特定条件是否满足,来选择执行相应的任务。u Bash 中允许测试两种类型的条件: 命令成功或失败,表达式为真或假u 任何一种测试中,都要有退出状态(返回值),退出状态为 0 表示命令成功或表达式为真,非0 则表示命令失败或表达式为假。q 内置测试命令 tes

8、tl 通常用 test 命令来测试表达式的值x=5; y=10test $x -gt $yecho $?l test 命令可以用 方括号方括号 来代替x=5; y=10 $x -gt $y echo $?q 表达式测试包括字符串测试、整数测试和文件测试。测试表达式的值测试表达式的值方括号前后要留空格!name=Tom $name = Tt? echo $?l 2.x 版本以上的 Bash 中可以用双方括号双方括号来测试表达式的值,此时可以使用通配符通配符进行模式匹配模式匹配。测试表达式的值测试表达式的值 $name = Tt? echo $?q 字符串测试字符串测试 -z str 如果字符串

9、str 长度为 0,返回真 -n str 如果字符串 str 长度不为 0,返回真 str1 = str2 两字符串相等 str1 != str2 两字符串不等name=Tom; -z $name ; echo $?操作符两边必须留空格!字符串测试字符串测试name2=Andy; $name = $name2 ; echo $?q 整数测试,即比较大小 int1 -eq int2 int1 等于 int2 int1 -ne int2 int1 不等于 int2 int1 -gt int2 int1 大于 int2 int1 -ge int2 int1 大于或等于 int2 int1 -lt i

10、nt2 int1 小于 int2 int1 -le int2 int1 小于或等于 int2x=1; $x -eq 1 ; echo $?x=a; $x -eq 1 ; echo $?整数测试整数测试操作符两边必须留空格!Xq 整数测试也可以使用 let 命令或双圆括号x=1; let $x = 1; echo $?x=1; ($x+1= 2 ); echo $? 只能用于整数测试!只能用于整数测试!整数测试整数测试l 相应的操作符为:= 、!= 、 、= 、 、 y ); then echo x is larger than yelif ( x = y); then echo x is eq

11、ual to yelse echo x is less than yfichkperm.sh#!/bin/bash# Using the old style test command: # : perm_check.sh#if -d $file then echo $ a directory elif -f $file then if -r $ -w $ -x $file then # nested if command echo You have read,write,and execute permission on $file. fielse echo $ neither a a dir

12、ectory. fichkperm2.sh#!/bin/bash# Using the new style test command: # : perm_check2.sh#if -d $file then echo $ a directory elif -f $file then if -r $ -w $ -x $file then # nested if command echo You have read,write,and execute permission on $file. fielse echo $ neither a a directory. finame_grep#!/bi

13、n/bash# : name_grep#name=Tomif grep $name /etc/passwd & /dev/null then :else echo $name not found in /etc/passwd exit 2fitellme#!/bin/bashecho -n How old 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 flow

14、ers 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 -le 39 thenecho Thirty something.elseecho Sorry I askedfitellme2#!/bin/bashecho -n How old are you? read ageif ( age 120 )

15、thenecho Welcome to our planet! exit 1 fiif (age = 0 & age = 13 & age = 19 & age = 30 & age 0 ) # or $# -gt 0 do echo $* shiftdoneshft.sh#!/bin/bash# Using shift to step through all the positional parameters.until -z $1 # Until all parameters used up.do echo $1 shiftdoneecho # Extra line feed.exit 0

16、q 生成随机数的特殊变量生成随机数的特殊变量echo $RANDOM 范围是范围是: 0, 32767q expr:通用的表达式计算命令通用的表达式计算命令表达式中参数与操作符必须以空格分开,表达式中的运表达式中参数与操作符必须以空格分开,表达式中的运算可以是算术运算,比较运算,字符串运算和逻辑运算。算可以是算术运算,比较运算,字符串运算和逻辑运算。expr 5 % 3expr 5 * 3 # 乘法符号必须被转义乘法符号必须被转义随机数和随机数和 expr 命令命令q 字符串操作字符串操作$#var返回字符串变量返回字符串变量 var 的长度的长度$var:m返回返回$var中从中从第第m个字

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

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

19、e:4echoecho -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*=; sle

20、ep 4;echo $dirname%bin*echoecho -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*/libsh x 脚本名脚本名该选项可以使用户跟踪脚本的执行,此时 shell 对脚本中每条命令的处理过程为:先执行替换,然后显示,再执行它。shel

21、l 显示脚本中的行时,会在行首添加一个加号 “ + ”。sh v 脚本名脚本名在执行脚本之前,按输入的原样打印脚本中的各行,打印一行执行一行。sh n 脚本名脚本名对脚本进行语法检查,但不执行脚本。如果存在语法错误,shell 会报错,如果没有错误,则不显示任何内容。脚本调试脚本调试编程小结:编程小结:变量变量q 局部变量、环境变量局部变量、环境变量(export、declare -x)q 只读变量、整型变量只读变量、整型变量例:例:declare -i x; x=hello; echo $x0q 位置参量位置参量($0,$1,.,$*,$,$#,$,$?)q 变量的间接引用变量的间接引用(e

22、val, $!str)例:例:name=hello; x=name; echo $!xhelloq 命令替换命令替换(cmd、$(cmd))q 整数运算整数运算 declare 定义的整型变量可以直接进行运算,定义的整型变量可以直接进行运算, 否则需用否则需用 let 命令或命令或 $.、$(.) 进行整数运算。进行整数运算。编程小结:编程小结:输入输出输入输出q 输入:输入:readread var1 var2 .readread p 提示提示q 输出:输出:printfprintf %-12.5f t %d n 123.45 8format以以%开头开头flagfield widthpre

23、cision格式符格式符-:左对齐左对齐+:输出符号输出符号0:空白处添空白处添0空格空格:前面加一空格前面加一空格字段宽度字段宽度小数点后小数点后输出位数输出位数cdefgsoxbnrtv”% REPLY REPLY输出参数用空格隔开输出参数用空格隔开q 字符串测试字符串测试编程小结:编程小结:条件测试条件测试 -z string 如果字符串如果字符串string长度为长度为0,返回真,返回真 -n string 如果字符串如果字符串string长度不为长度不为0,返回真,返回真 str1 = str2 两字符串相等(也可以使用两字符串相等(也可以使用 = ) str1 != str2 两字

24、符串不等两字符串不等操作符两边必须留空格!操作符两边必须留空格! str1 = str2 两字符串相等(也可以使用两字符串相等(也可以使用 = ) str1 != str2 两字符串不等两字符串不等 str1 str2 str1大于大于str2,按按ASCII码比较码比较 str1 Tom ; echo $?编程小结:编程小结:条件测试条件测试q 整数测试整数测试 int1 -eq int2 int1 等于等于 int2 int1 -ne int2 int1 不等于不等于 int2 int1 -gt int2 int1 大于大于 int2 int1 -ge int2 int1 大于或等于大于或

25、等于 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 i+=1 done# Now, call the functions.funexit

26、 0ex4fun3.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 actually called until this poin

27、t# although it is referenced before its definition.# This is permissible.q 向函数传递参数向函数传递参数函数的调用函数的调用例:例:ex4fun4.shq 函数与命令行参数函数与命令行参数例:例:ex4fun5.shq return 与与 exit例:例:ex4fun6.sh向函数传递参数向函数传递参数 例:例:ex4fun4.sh#!/bin/bash# Functions and parametersDEFAULT=default # Default param value.func2 () if -z $1 # I

28、s 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 0echoecho Nothing passedfunc2 # Called with no paramsechoecho One parameter passed.func2 first # Called

29、with one paramechoecho 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 函数与命令行参数函数与命令行参数 例:例:ex4fun5.sh #!/bin/bash# function and command line arguments# Call this script with a comm

30、and line argument,# 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 return 与与 exit 例:例:ex4

31、fun6.sh#!/bin/bash# purpose: 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 firead num1 num2echo num1=$num1, num2=$num2max2 $num1 $num2return_val=$?echo The larger of the two numbers is: $return_val.exit 0

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

当前位置:首页 > 应用文书 > 工作计划

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

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