




已阅读5页,还剩3页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
实验十六:shell脚本编程一、实验准备知识:详见P180-198(一)、Shell脚本和Shell编程1、定义:n 当命令不在命令行中执行,而是从一个文件中执行时,该文件就称为 Shell 脚本。n Shell 脚本是纯文本文件。n Shell 脚本通常以 .sh 作为后缀名,但不是必须。n Shell 脚本是以行为单位的,在执行脚本的时候会分解成一行一行依次执行。Shell 是一种功能强大的解释型编程语言:n 通常用于完成特定的、较复杂的系统管理任务n Shell 脚本语言非常擅长处理文本类型的数据2、Shell脚本的成分n 程序元素q 保留字、运算符、表达式q 变量、数组、输入输出q 控制结构(顺序、分支、循环、子程序调用)n Shell功能 【参见第2、3章内容】q 执行命令(内置命令、外部命令、自编程序)q 重定向、管道、命令替换、命令聚合q 通配符、注释符、q Shell环境3、Shell 脚本的建立与执行1)Shell 脚本的建立使用文本编辑器编辑脚本文件:# vi script-file为脚本文件添加可执行权限:# chmod +x script-file2)Shell 脚本的执行在子Shell中执行:当执行一个脚本文件时,shell就会产生一个子shell(即一个子进程)去执行命令文件中的命令。因此,脚本文件中的变量值不能传递到当前shell(即父shell)# bash script-file# script-file在当前Shell中执行:为了使得脚本文件中的变量值传递到当前shell,必须在命令文件名前面加“source”或“.”命令。功能是在当前shell中执行脚本文件中的命令,而不是产生一个子shell来执行命令文件中的命令。# source script-file# . script-file说明:1、PATH 环境变量的默认值不包含当前目录,若脚本文件在当前目录,应使用 ./script-file2、PATH 环境变量的默认值包含 /bin 目录,用户可以将自己的脚本文件存放在 /bin 目录,之后即可直接调用脚本文件名执行脚本了。应用举例:以不同方式执行shell脚本例子(P181)4、Shell 脚本的编码规范n 以 #! 开头:通知系统用何解释器执行此脚本#!/bin/bash#!/bin/kshn 以注释形式说明如下的内容:# 脚本名称# 脚本功能# 作者及联系方式# 版本更新记录# 版权声明# 对算法做简要说明(如果是复杂脚本)5、shell变量操作。n 变量的数值计算q $expression q $(expression)n 输入q 变量赋值n name=valuen readonlyq 从标准输入读取n readn 输出q echoq printf应用举例1:shell算术运算举例(P182)应用举例2:从标准输入读取变量的值举例(P183)6、位置变量和简单脚本举例。1)、Shell 变量的分类:n 用户自定义变量q 由用户自己定义、修改和使用n Shell 环境变量q 由系统维护,用于设置用户的Shell工作环境q 只有少数的变量用户可以修改其值n 位置参数变量(Positional Parameters)q 通过命令行给程序传递执行参数q 可用 shift 命令实现位置参数的迁移n 专用参数变量(Special Parameters)q Bash 预定义的特殊变量q 用户不能修改其值2)顺序结构脚本举例(略)3)、位置参数n 是一组特殊的内置变量q 跟在脚本名后面的用空格隔开的每个字符串q $1 表示第1个参数值,$9 表示第9个参数值q $10 表示第10个参数值, $11 表示第11个参数值, n 位置参数的用途q 从 shell 命令/脚本 的命令行接受参数q 在调用 shell 函数时为其传递参数位置参数含义详见P184表10-1.7、条件测试和分支结构。1)条件测试概念:n 条件测试可以判断某个特定条件是否满足q 测试之后通常会根据不同的测试值选择执行不同任务n 条件测试的种类q 命令成功或失败q 表达式为真或假n 条件测试的值q Bash中没有布尔类型变量n 退出状态为 0 表示命令成功或表达式为真n 非0 则表示命令失败或表达式为假q 状态变量 $? 中保存了退出状态的值n 语句q 格式1: test q 格式2: q 格式3: (bash 2.x 版本以上)n 说明q 格式1 和 格式2 是等价的,格式3是扩展的 test 命令q 在 中可以使用通配符进行模式匹配q &, |, 能够正常存在于 中,但不能在 中出现q 和之后的字符必须为空格,和之前的字符必须为空格q 要对整数进行关系运算也可以使用 () 进行测试条件测试操作符:n 条件测试表达式中可用的操作符q 文件测试操作符q 字符串测试操作符q 整数二元比较操作符q 使用逻辑运算符文件测试:测试文件是否存在,文件属性,访问权限等。字符串测试:整数测试:有在中和()中两种形式。注意:操作符两边必须留空格!注意:操作符两边的空格可省略!逻辑测试:应用举例:# a=linux ; b=unix# n=5 ; m=7# $a != $b ; echo $?0# $a != $b ; echo $?0# $n -gt $m ; echo $?1# $n$m ; echo $?1# (nm) ; echo $?1# ($n$m) ; echo $?1# nm ; echo $?0# $a != $b & echo T | echo FT# $a != $b & echo T| echo FT# $n -gt $m & echo T | echo FT# $n$m & echo T | echo FF# (nm) & echo T | echo FF# ($n$m) & echo T | echo FF# nm & echo T | echo FT8、流程控制q 分支q if 条件语句q case 选择语句q 循环q for 循环语句q while 循环语句q until 循环语句q select 循环与菜单q 循环控制q break 语句q continue 语句q 位置参数处理q shift 命令q getopts 命令 1)、if 语句语法:if expr1 # 如果 expr1 为真(返回值为0)then # 那么 commands1 # 执行语句块 commands1elif expr2 # 若 expr1 不真,而 expr2 为真then # 那么 commands2 # 执行语句块 commands2 . . # 可以有多个 elif 语句 else # else 最多只能有一个 commands4 # 执行语句块 commands4fi # if 语句必须以单词 fi 终止说明:u elif 可以有任意多个(0 个或多个)u else 最多只能有一个(0 个或 1 个)u if 语句必须以 fi 表示结束u exprX 通常为条件测试表达式;也可以是多个命令,以最后一个命令的退出状态为条件值。u commands 为可执行语句块,如果为空,需使用 shell 提供的空命令 “ : ”,即冒号。该命令不做任何事情,只返回一个退出状态 0u if 语句可以嵌套使用应用举例1:例1(P188)应用举例2:例2(P188)应用举例3:例3(P188)应用举例4:例4(P189)2)、case 语句语法:case expr in # expr 为表达式,关键词 in 不要忘! pattern1) # 若 expr 与 pattern1 匹配,注意括号 commands1 # 执行语句块 commands1 ; # 跳出 case 结构 pattern2) # 若 expr 与 pattern2 匹配 commands2 # 执行语句块 commands2 ; # 跳出 case 结构 . . # 可以有任意多个模式匹配 *) # 若 expr 与上面的模式都不匹配 commands # 执行语句块 commands ; # 跳出 case 结构esac # case 语句必须以 esac 终止case 语句说明:u 表达式 expr 按顺序匹配每个模式,一旦有一个模式匹配成功,则执行该模式后面的所有命令,然后退出 case。u 如果 expr 没有找到匹配的模式,则执行缺省值 “ *) ” 后面的命令块 ( 类似于 if 中的 else );“ *) ” 可以不出现。u 所给的匹配模式 pattern 中可以含有通配符和“ | ”。u 每个命令块的最后必须有一个双分号,可以独占一行,或放在最后一个命令的后面。应用举例1:例1(P190)应用举例2:例2(P190)3)、for循环(foreach型)语法:for variable in list # 每一次循环,依次把列表 list 中的一个值赋给循环变量do # 循环体开始的标志 commands # 循环变量每取一次值,循环体就执行一遍done # 循环结束的标志,返回循环顶部说明:q 列表 list 可以是命令替换、变量名替换、字符串和文件名列表 ( 可包含通配符 ),每个列表项以空格间隔q for 循环执行的次数取决于列表 list 中单词的个数q 可以省略 in list ,省略时相当于 in $应用举例1:例1(P192)应用举例2:例2(P192)应用举例3:例3(P193)应用举例5:例4(P193)应用举例5:例5(P193)4)、while 循环语句:while expr # 执行 exprdo # 若expr的退出状态为0,进入循环,否则退出while commands # 循环体done # 循环结束标志,返回循环顶部应用举例1:例1(P191)9、函数1、简介:n 为了避免大型脚本变得复杂、晦涩而使用函数n 将大型脚本代码分割成小块,将这些被命名的代码块称为函数q 一个函数就是一个子程序,用于完成特定的任务n 如:添加一个用户、判断用户是否为管理员 等n 函数定义之后可以被使用它的主程序调用q 调用函数的方法与执行Shell命令无异q 可以在Shell脚本中调用(函数需先定义而后调用)在命令行上直接调用(定义函数的文件需先加载)2、函数的定义和调用n 函数定义function 函数名 commands n 函数调用函数名 参数1 参数2 .3、函数的存储和显示:n 函数的存储q 函数和调用它的主程序保存在同一个文件中n 函数的定义必须出现在调用之前q 函数和调用它的主程序保存在不同的文件中n 保存函数的文件必须先使用 source 命令执行,之后才能调用其中的函数n 函数的显示q 显示当前Shell可见的所有函数名# declare -Fq 显示当前Shell可见的所有(指定)的函数定义#declare -f#declare -f 应用举例1:例1(P194)应用举例2:#!/bin/bash# filename: all_in_one_backup_select.sh# User define Function (UDF) #sql_bak () echo Running mysqldump tool.; sync_bak () echo Running rsync tool.; git_bak () echo Running gistore tool.; tar_bak () echo Running t
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 福建三明2024~2025学年高一下册期末模拟数学试题学生卷
- 互联网平台数据驱动决策的个性化教育解决方案考核试卷
- 形状记忆纤维在智能建筑中的应用案例分析考核试卷
- 合成气制柴油技术环保技术集成与应用考核试卷
- 产业升级中的区域创新能力建设考核试卷
- 部编教材三年级语文下册各单元试卷(全册)
- 2025年中国PT泵嘴试验台数据监测报告
- 2025年中国PET不干胶数据监测报告
- 2025年中国D-蛋氨酸数据监测研究报告
- 2025年中国48头超宽高速喷绘机数据监测研究报告
- 信息安全培训《钓鱼邮件防范技巧》
- 2025至2030中国烫印箔行业发展趋势分析与未来投资战略咨询研究报告
- 部编版高一语文必修上册教案计划
- 临时工请假管理制度
- 小学用电安全课件
- 2025年北京市高考英语试卷真题(含答案解析)
- 2025年中国浮萍项目投资可行性研究报告
- 商洛学院《大学学术综合英语》2023-2024学年第二学期期末试卷
- 2025年高考英语全国二卷听力试题答案详解讲解(课件)
- 高级采气工理论练习卷附答案
- 打架斗殴等暴力事件处理流程图
评论
0/150
提交评论