Linux 基础教程--Shell脚本编程.ppt
《Linux 基础教程--Shell脚本编程.ppt》由会员分享,可在线阅读,更多相关《Linux 基础教程--Shell脚本编程.ppt(174页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、第10章bash 脚本编程本章内容要点nShell 脚本的编制、执行和调试nShell 脚本的成分和编码规范nShell 变量替换扩展、数值计算、输入输出n变量分类,位置参数变量和特殊参数变量n条件测试(文件测试、字符串测试、整数测试)n分支流程控制(if、case)n循环流程控制(for、while、until、select)n函数的定义和调用、返回值n使用循环分析命令行参数本章学习目标 n熟悉Shell 脚本的编码规范,掌握执行和调试方法n掌握对变量进行整数运算和间接引用的方法n理解位置参数变量和特殊参数变量的用途n掌握条件测试的使用 、()n掌握各种流程控制语句的使用qif、caseqf
2、or、while、until、select、break、continuen掌握函数的定义、调用和传递返回值的方法n掌握命令行参数、位置参数的操作(shift、getopts)SHELL编程基础编程基础2023年1月15日4Shell脚本和Shell编程n当命令不在命令行中执行,而是从一个文件中执行时,该文件就称为 Shell 脚本。qShell 脚本是纯文本文件。qShell 脚本通常以.sh 作为后缀名,但不是必须。qShell 脚本是以行为单位的,在执行脚本的时候会分解成一行一行依次执行。nShell 是一种功能强大的解释型编程语言q通常用于完成特定的、较复杂的系统管理任务qShell 脚
3、本语言非常擅长处理文本类型的数据2023年1月15日5Shell脚本的成分n程序元素q保留字、运算符、表达式q变量、数组、输入输出q控制结构(顺序、分支、循环、子程序调用)nShell功能【参见第2、3章内容】q执行命令(内置命令、外部命令、自编程序)q重定向、管道、命令替换、命令聚合重定向、管道、命令替换、命令聚合q通配符、注释符、qShell环境2023年1月15日6Shell 脚本的建立与执行nShell 脚本的建立q使用文本编辑器编辑脚本文件$vi script-fileq为脚本文件添加可执行权限$chmod+x script-filenShell 脚本的执行q在子Shell中执行$b
4、ash script-file$script-fileq在当前Shell中执行$source script-file$.script-file2023年1月15日7PATH 环境变量的默认值不包含当前目录,若脚本文件在当前目录,应使用./script-filePATH 环境变量的默认值包含/bin 目录,用户可以将自己的脚本文件存放在/bin 目录,之后即可直接调用脚本文件名执行脚本了Shell 脚本的编码规范n以#!开头:通知系统用何解释器执行此脚本#!/bin/bash#!/bin/kshn以注释形式说明如下的内容:#脚本名称#脚本功能#作者及联系方式#版本更新记录#版权声明#对算法做简要
5、说明(如果是复杂脚本)2023年1月15日8Shell脚本举例(1)2023年1月15日9#!/bin/bash#This is the first Bash shell program#Scriptname:greetings.shechoecho-e Hello$LOGNAME,cecho its nice talking to you.echo-n Your present working directory is:pwd#Show the name of present directoryechoecho-e The time is date+%T!.nByeechoShell脚本举例
6、(2)2023年1月15日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 脚本调试方法n在 bash 调用脚本时使用参数$bash-x-n-v scriptNamen在脚本中使用 bash 内置的 set 命令使整个或部分脚本处于调试模式开启:开启:set-x-n-v结束:结束:set+x+n+v2023年1月15日11脚本调试 12023年1月15日12sh x 脚本名该选项可以使用户跟踪脚本的执行,此时 shell 对脚本中每条命令的处理过程为:先执行替换,然后显示,再执行它。shell 显示脚本中的行时,会在行首添加一个加
8、号“+”。sh v 脚本名在执行脚本之前,按输入的原样打印脚本中的各行。sh n 脚本名对脚本进行语法检查,但不执行脚本。如果存在语法错误,shell 会报错,如果没有错误,则不显示任何内容。脚本调试举例 1n对脚本进行语法检查$bash-n greetings.shn显示脚本中每个原始命令行及其执行结果$bash-v greetings.shn以调试模式执行脚本$bash-x greetings.sh2023年1月15日13脚本调试 2 set命令n在脚本内使用set命令开启调试选项qset-x:显示由shell执行的命令及其参数qset-v:显示由shell读入的命令行qset-n:读取命
9、令但不执行他们,用于语法检查n在脚本内使用set命令关闭已开启的调试选项qset+xqset+vqset+n2023年1月15日14脚本调试举例 2$bash greetings.sh./greetings.sh$source greetings.sh2023年1月15日15#!/bin/bash#This is the first Bash shell program#Scriptname:greetings.shset-x#Turn ON debug mode#echoecho-e Hello$LOGNAME,cecho its nice talking to you.echo-n You
10、r present working directory is:pwd#Show the name of present directoryechoset+x#Turn OFF debug mode#echo-e The time is date+%T!.nByeechoShell脚本的类型n非交互式脚本q不需要读取用户的输入,也不用向用户反馈某些信息q每次执行都是可预见的,因为它不读取用户输入,参数是固定的q可以在后台执行n交互式脚本q脚本可以读取用户的输入,实时向用户反馈信息(输出某些信息)q这样的脚本更灵活,每次执行时的参数可由用户动态设定q用户界面更友好,但不适用于自动化任务(如cron
11、任务)2023年1月15日16学习Shell编程的前提n掌握一种文本编辑器的使用(Vi)n熟悉 Linux 文件系统的布局n学习 Shell 的各种功能q重定向、管道、命令替换、命令聚合n学习各种管理和监视命令的使用q用户管理、权限管理、进程管理、包管理q系统监视、网络监视 n学习各种文本文件工具的使用qcat、grep、tr、sed、awk q正则表达式2023年1月15日17系统的配置文件几乎都是纯文本文件变量和表达式变量和表达式2023年1月15日18Shell 变量操作变量操作n变量替换扩展q变量测试q变量的字符串操作q变量的间接引用n变量的数值计算q$expression q$(ex
12、pression)qexprqletqdeclare-i2023年1月15日19n输入q变量赋值nname=valuenreadonlyq从标准输入读取nreadn输出qechoqprintf变量替换扩展变量测试2023年1月15日20Use Default Values$var:-word若若var存在且非空存在且非空,则值为则值为$var;若若var未定义或为空值未定义或为空值,则值为则值为word,但,但var的值不变。的值不变。Assign Default Values$var:=word若若var存在且非空存在且非空,则值为则值为$var;若若var未定义或为空值未定义或为空值,则值
13、为则值为word,且,且var被赋值被赋值word。Display Error if Null or Unset$var:?word若若var存在且非空存在且非空,则值为则值为$var;若若var未定义或为空值未定义或为空值,则输出信则输出信息息word,并终止脚本。,并终止脚本。Use Alternate Value$var:+word若若var存在且非空存在且非空,则值为则值为word;否则返回空值,但否则返回空值,但var的值不变。的值不变。变量测试举例2023年1月15日21color=bluenewcolor=$color:-greyunset colorecho The sky i
14、s$color:-grey todayecho$color echo The sky is$color:=grey todayecho$color echo The sky is$color:?error todayecho$color echo The sky is$color:+blue todayecho$color 变量替换扩展 字符串计数、截取2023年1月15日22$#var返回字符串变量返回字符串变量 var 的长度的长度$var:m返回返回$var中从中从第第m个字符到最后个字符到最后的部分的部分$var:m:len返回返回$var中从中从第第m个字符开始,长度为个字符开始,长
15、度为len的部分的部分$var#pattern删除删除$var中中开头开头部分与部分与pattern匹配的匹配的最小最小部分部分$var#pattern删除删除$var中中开头开头部分与部分与pattern匹配的匹配的最大最大部分部分$var%pattern删除删除$var中中结尾结尾部分与部分与pattern匹配的匹配的最小最小部分部分$var%pattern删除删除$var中中结尾结尾部分与部分与pattern匹配的匹配的最大最大部分部分m 的取值从的取值从 0 到到$#var-1注:注:pattern 中可以使用中可以使用通配符通配符。字符串变量替换扩展举例12023年1月15日23st
16、r=I love linux.I love UNIX too.echo$#str30echo$#str:13I love UNIX too.echo$#str:7:5linuxecho$str#I lovelinux.I love UNIX too.echo$str#I*.I love UNIX too.echo$str#I*变量替换扩展 字符串替换2023年1月15日24$var/old/new用用new替换替换$var中第一次出现的中第一次出现的old$var/old/new用用new替换替换$var中所有的中所有的old(全局替换全局替换)$var/#old/new用用new替换替换$v
17、ar中中开头开头部分与部分与old匹配的部分匹配的部分$var/%old/new用用new替换替换$var中中结尾结尾部分与部分与old匹配的部分匹配的部分注:注:(1)old 中可以使用中可以使用 通配符通配符。(2)var 可以是可以是 或或*,表示对每个位置参数进行替换,表示对每个位置参数进行替换字符串变量替换扩展举例22023年1月15日25str=I love linux.I love UNIX too.echo$str/love/likeI like linux.I love UNIX too.echo$str/love/likeI like linux.I like UNIX t
18、oo.echo$str/I*linux/I like FreeBSDI like FreeBSD.I love UNIX too.echo$str/#I love/JaimeJaime linux.I love UNIX too.echo$str/I love/JaimeJaime linux.Jaime UNIX too.echo$str/%too./also.I love linux.I love UNIX also.字符串变量替换扩展举例32023年1月15日26set 1v1 1v2 1v3 1v4echo$1v1 1v2 1v3 1v4echo$/1/aav1 av2 av3 av4
19、echo$/1/aava av2 av3 av4echo$/%1/a1va 1v2 1v3 1v4变量的间接引用n通过 str2 的值来引用 str1 的值2023年1月15日27str1=Hello Worldstr2=str1echo$str2 bash2.0以上才支持以上才支持newstr=$!str2echo$newstrHello World或或echo$!str2Hello World eval newstr=$str2echo$newstrHello World或或eval echo$str2Hello World?变量的间接引用(续)2023年1月15日28n通过 x 的值来引
20、用 CENTOS_URL 的值x=CENTOSCENTOS_URL=http:/ newstr=$x_URLecho$newstr或或eval echo$x_URLShell内置命令eval2023年1月15日29listpage=ls-l|moreeval$listpageeval$(ssh-agent)eval newstr=$str2eval echo$x_URL eval arg1 arg2.argNl对参数进行两次扫描和替换l 将所有的参数连接成一个表达式,并计算或执行该表达式l 参数中的任何变量都将被展开Shell 变量的分类变量的分类n用户自定义变量用户自定义变量q由用户自己定义
21、、修改和使用nShell Shell 环境变量环境变量q由系统维护,用于设置用户的Shell工作环境q只有少数的变量用户可以修改其值n位置参数变量位置参数变量(Positional Parameters)q通过命令行给程序传递执行参数q可用 shift 命令实现位置参数的迁移n专用参数变量专用参数变量(Special Parameters)qBash 预定义的特殊变量q用户不能修改其值2023年1月15日30位置参数变量n是一组特殊的内置变量q跟在脚本名后面的用空格隔开的每个字符串q$1 表示第1个参数值,$9 表示第9个参数值q$10 表示第10个参数值,$11 表示第11个参数值,n位置参
22、数的用途q从 shell 命令/脚本 的命令行接受参数q在调用 shell 函数时为其传递参数2023年1月15日31专用参数变量n命令行参数相关命令行参数相关q$*将所有位置参量看成一个字符串(以空格间隔)。q$将每个位置参量看成单独的字符串(以空格间隔)。q“$*”将所有位置参量看成一个字符串(以$IFS间隔)。q“$”将每个位置参量看成单独的字符串(以空格间隔)。q$0 命令行上输入的Shell程序名。q$#表示命令行上参数的个数。n进程状态相关进程状态相关q$?表示上一条命令执行后的返回值q$当前进程的进程号q$!显示运行在后台的最后一个作业的 PID q$_ 在此之前执行的命令或脚本
23、的最后一个参数2023年1月15日32位置参数和专用参数举例n执行脚本$./vartest.sh 1 2 3 4 5 a b c d e f g2023年1月15日33#!/bin/bash#ScriptName:vartest.sh#To test Positional Parameters&Special Parameters.echo Hello,$USER,the output of this script are as follows:echo The script name is :$(basename$0)echo The first param of the script is
24、 :$1echo The second param of the script is :$2echo The tenth param of the script is :$10echo All the params you input are :$echo All the params you input are :$*echo The number of the params you input are:$#echo The process ID for this script is :$echo The exit status of this script is :$?”$、$*和环境变量
25、IFS2023年1月15日34n执行脚本$./ifsargs.sh 1 2 3 4 5 a b c d e f g#!/bin/bash#ScriptName:ifsargs.sh#Set the IFS to|#IFS=|echo Command-Line Arguments Demo“echo*All args displayed using$positional parameter*echo$echo*All args displayed using$*positional parameter*echo$*echo*All args displayed using$positional
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- Linux 基础教程-Shell脚本编程 基础教程 Shell 脚本 编程
限制150内