linux-基础教程-shell脚本编程

上传人:shaoy****1971 文档编号:114119704 上传时间:2019-11-10 格式:PPT 页数:174 大小:2.79MB
返回 下载 相关 举报
linux-基础教程-shell脚本编程_第1页
第1页 / 共174页
linux-基础教程-shell脚本编程_第2页
第2页 / 共174页
linux-基础教程-shell脚本编程_第3页
第3页 / 共174页
linux-基础教程-shell脚本编程_第4页
第4页 / 共174页
linux-基础教程-shell脚本编程_第5页
第5页 / 共174页
点击查看更多>>
资源描述

《linux-基础教程-shell脚本编程》由会员分享,可在线阅读,更多相关《linux-基础教程-shell脚本编程(174页珍藏版)》请在金锄头文库上搜索。

1、第10章 bash 脚本编程,本章内容要点,Shell 脚本的编制、执行和调试 Shell 脚本的成分和编码规范 Shell 变量替换扩展、数值计算、输入输出 变量分类,位置参数变量和特殊参数变量 条件测试(文件测试、字符串测试、整数测试) 分支流程控制(if、case) 循环流程控制(for、while、until、select) 函数的定义和调用、返回值 使用循环分析命令行参数,本章学习目标,熟悉Shell 脚本的编码规范,掌握执行和调试方法 掌握对变量进行整数运算和间接引用的方法 理解位置参数变量和特殊参数变量的用途 掌握条件测试的使用 、() 掌握各种流程控制语句的使用 if、case

2、 for、while、until、select、break、continue 掌握函数的定义、调用和传递返回值的方法 掌握命令行参数、位置参数的操作(shift、getopts),Shell编程基础,2019年11月10日,4,Shell脚本和Shell编程,当命令不在命令行中执行,而是从一个文件中执行时,该文件就称为 Shell 脚本。 Shell 脚本是纯文本文件。 Shell 脚本通常以 .sh 作为后缀名,但不是必须。 Shell 脚本是以行为单位的,在执行脚本的时候会分解成一行一行依次执行。 Shell 是一种功能强大的解释型编程语言 通常用于完成特定的、较复杂的系统管理任务 She

3、ll 脚本语言非常擅长处理文本类型的数据,2019年11月10日,5,Shell脚本的成分,程序元素 保留字、运算符、表达式 变量、数组、输入输出 控制结构(顺序、分支、循环、子程序调用) Shell功能 【参见第2、3章内容】 执行命令(内置命令、外部命令、自编程序) 重定向、管道、命令替换、命令聚合 通配符、注释符、 Shell环境,2019年11月10日,6,Shell 脚本的建立与执行,Shell 脚本的建立 使用文本编辑器编辑脚本文件 $ vi script-file 为脚本文件添加可执行权限 $ chmod +x script-file Shell 脚本的执行 在子Shell中执行

4、 $ bash script-file $ script-file 在当前Shell中执行 $ source script-file $ . script-file,2019年11月10日,7,PATH 环境变量的默认值不包含当前目录, 若脚本文件在当前目录,应使用 ./script-file,PATH 环境变量的默认值包含 /bin 目录, 用户可以将自己的脚本文件存放在 /bin 目录, 之后即可直接调用脚本文件名执行脚本了,Shell 脚本的编码规范,以 #! 开头:通知系统用何解释器执行此脚本 #!/bin/bash #!/bin/ksh 以注释形式说明如下的内容: # 脚本名称 #

5、脚本功能 # 作者及联系方式 # 版本更新记录 # 版权声明 # 对算法做简要说明(如果是复杂脚本),2019年11月10日,8,Shell脚本举例(1),2019年11月10日,9,#!/bin/bash # This is the first Bash shell program # Scriptname: greetings.sh echo echo -e “Hello $LOGNAME, c“ echo “its nice talking to you.“ echo -n “Your present working directory is: “ pwd # Show the name

6、 of present directory echo echo -e “The time is date +%T!. nBye“ echo,Shell脚本举例(2),2019年11月10日,10,#!/bin/bash # Script Name:/etc/cron.daily/ntpdate # 使用NTP的客户端命令ntpdate与远程NTP服务器进行同步 # 也可以用局域网内的NTP服务器替换 pool.ntp.org /usr/sbin/ntpdate -s pool.ntp.org # 更改硬件时钟时都会记录在/etc/adjtime文件中 # 使hwclock根据先前的记录来估算硬

7、件时钟的偏差, # 并用来校正目前的硬件时钟 /sbin/hwclock -adjust # 将系统时钟同步到硬件时钟 /sbin/hwclock systohc,脚本调试方法,在 bash 调用脚本时使用参数 $ bash -x -n -v scriptName 在脚本中使用 bash 内置的 set 命令使整个或部分脚本处于调试模式 开启:set -x -n -v 结束:set +x +n +v,2019年11月10日,11,脚本调试 1,2019年11月10日,12,sh x 脚本名,该选项可以使用户跟踪脚本的执行,此时 shell 对脚本中每条命令的处理过程为:先执行替换,然后显示,再

8、执行它。 shell 显示脚本中的行时,会在行首添加一个加号 “ + ”。,sh v 脚本名,在执行脚本之前,按输入的原样打印脚本中的各行。,sh n 脚本名,对脚本进行语法检查,但不执行脚本。如果存在语法错误,shell 会报错,如果没有错误,则不显示任何内容。,脚本调试举例 1,对脚本进行语法检查 $ bash -n greetings.sh 显示脚本中每个原始命令行及其执行结果 $ bash -v greetings.sh 以调试模式执行脚本 $ bash -x greetings.sh,2019年11月10日,13,脚本调试 2 set命令,在脚本内使用set命令开启调试选项 set

9、-x :显示由shell执行的命令及其参数 set -v :显示由shell读入的命令行 set -n :读取命令但不执行他们,用于语法检查 在脚本内使用set命令关闭已开启的调试选项 set +x set +v set +n,2019年11月10日,14,脚本调试举例 2,$ bash greetings.sh ./greetings.sh $ source greetings.sh,2019年11月10日,15,#!/bin/bash # This is the first Bash shell program # Scriptname: greetings.sh set -x # Tur

10、n ON debug mode # echo echo -e “Hello $LOGNAME, c“ echo “its nice talking to you.“ echo -n “Your present working directory is: “ pwd # Show the name of present directory echo set +x # Turn OFF debug mode # echo -e “The time is date +%T!. nBye“ echo,Shell脚本的类型,非交互式脚本 不需要读取用户的输入, 也不用向用户反馈某些信息 每次执行都是可预

11、见的, 因为它不读取用户输入, 参数是固定的 可以在后台执行 交互式脚本 脚本可以读取用户的输入, 实时向用户反馈信息(输出某些信息) 这样的脚本更灵活, 每次执行时的参数可由用户动态设定 用户界面更友好,但不适用于自动化任务(如cron任务),2019年11月10日,16,学习Shell编程的前提,掌握一种文本编辑器的使用(Vi) 熟悉 Linux 文件系统的布局 学习 Shell 的各种功能 重定向、管道、命令替换、命令聚合 学习各种管理和监视命令的使用 用户管理、权限管理、进程管理、包管理 系统监视、网络监视 学习各种文本文件工具的使用 cat、grep、tr、sed、awk 正则表达式

12、,2019年11月10日,17,系统的配置文件几乎都是纯文本文件,变量和表达式,2019年11月10日,18,Shell 变量操作,变量替换扩展 变量测试 变量的字符串操作 变量的间接引用 变量的数值计算 $expression $(expression) expr let declare -i,2019年11月10日,19,输入 变量赋值 name=value readonly 从标准输入读取 read 输出 echo printf,变量替换扩展变量测试,2019年11月10日,20,变量测试举例,2019年11月10日,21,color=blue newcolor=$color:-grey

13、,unset color echo “The sky is $color:-grey today“ echo $color,echo “The sky is $color:=grey today“ echo $color,echo “The sky is $color:?error today“ echo $color,echo “The sky is $color:+blue today“ echo $color,变量替换扩展 字符串计数、截取,2019年11月10日,22,m 的取值从 0 到 $#var-1,注:pattern 中可以使用通配符。,字符串变量替换扩展举例1,2019年11

14、月10日,23,str=I love linux. I love UNIX too.,echo $#str 30 echo $#str:13 I love UNIX too. echo $#str:7:5 linux,echo $str#I love linux. I love UNIX too. echo $str#I*. I love UNIX too. echo $str#I*,变量替换扩展 字符串替换,2019年11月10日,24,注: (1)old 中可以使用 通配符。 (2)var 可以是 或 *,表示对每个位置参数进行替换,字符串变量替换扩展举例2,2019年11月10日,25,

15、str=I love linux. I love UNIX too.,echo $str/love/like I like linux. I love UNIX too. echo $str/love/like I like linux. I like UNIX too. echo $str/I*linux/I like FreeBSD I like FreeBSD. I love UNIX too. echo $str/#I love/“Jaime“ Jaime linux. I love UNIX too. echo $str/I love/“Jaime“ Jaime linux. Jai

16、me UNIX too. echo $str/%too./also. I love linux. I love UNIX also.,字符串变量替换扩展举例3,2019年11月10日,26,set 1v1 1v2 1v3 1v4,echo $ 1v1 1v2 1v3 1v4 echo $/1/a av1 av2 av3 av4 echo $/1/a ava av2 av3 av4 echo $/%1/a 1va 1v2 1v3 1v4,变量的间接引用,通过 str2 的值来引用 str1 的值,2019年11月10日,27,str1=“Hello World“ str2=str1 echo $str2, bash2.0以上才支持 newstr=$!str2 echo $newstr Hello

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

当前位置:首页 > 中学教育 > 职业教育

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号