版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第4章shell编程-shellscript
项目导入:如果想要管理好属于你的主机,那么一定要好好学习shellscript。shellscript有点像是早期的批处理,即将一些命令汇总起来一次运行。但是Shellscript拥有更强大的功能,那就是它可以进行类似程序(program)的撰写,并且不需要经过编译(compile)就能够运行,非常方便。同时,我们还可以通过shellscript来简化我们日常的工作管理。在整个Linux的环境中,一些服务(service)的启动都是通过shellscript来运行的,如果你对于script不了解,一旦发生问题,可真是会求助无门啊!
职业能力目标和要求:
理解shellscript。
掌握判断式的用法。
掌握条件判断式的用法。
掌握循环的用法。第4章shell编程-shellscript
1.
了解shellscript
2.练习简单的shellscript
3.用好判断式
4.使用条件判断式
7.项目实录
5.使用循环(loop)
6.对shellscript进行追踪与调试4.1了解shellscript
1.了解shellscript
2.编写与执行一个shellscript
3.养成撰写shellscript的良好习惯4.1.1了解shellscript简单地说,shellscript就像是早期DOS年代的批处理(.bat),最简单的功能就是将许多命令写在一起,让使用者很轻易地就能够一下子处理复杂的操作(运行一个文件“shellscript”,就能够一次运行多个命令)。而且shellscript更提供数组、循环、条件与逻辑判断等重要功能,让用户也可以直接以shell来撰写程序,而不必使用类似C程序语言等传统程序撰写的语法。4.1.2编写与执行一个shellscript4.1.2编写与执行一个shellscript4.1.2编写与执行一个shellscript4.1.2编写与执行一个shellscript4.1.3养成撰写shellscript的良好习惯建议一定要养成良好的script撰写习惯,在每个script的文件头处包含如下内容:
script的功能;
script的版本信息;
script的作者与联络方式;
script的版权声明方式;
script的History(历史记录);
script内较特殊的命令,使用“绝对路径”的方式来执行;
script运行时需要的环境变量预先声明与设置。4.2练习简单的shellscript
1.完成简单范例
2.了解脚本的运行方式的差异4.2.1完成简单范例4.2.1完成简单范例4.2.1完成简单范例4.2.1完成简单范例1.利用绝对路径、相对路径、文件名、bash、sh等方式直接运行脚本4.2.2了解脚本的运行方式的差异2.利用source和.运行脚本时:在父程序中运行4.3用好判断式子任务1利用test命令的测试功能[root@wwwscripts]#vimsh05.sh#!/bin/sh#2019/12/8 申海杰echo"本程序会输出你提供的文件名对应文件的的类型及权限。"read-p"请输入一个文件名:"filenametest-z$filename&&echo"你必须输入一个文件名。"&&exit0test!-e$filename&&echo"文件不存在。"&&exit0test-f$filename&&filetype="普通文件"test-d$filename&&filetype="目录文件"test-r$filename&&perm="可读"test-w$filename&&perm="$perm可写"test-x$filename&&perm="$perm可执行"echo"文件$filename是一个$filetype。"echo"当前用户对此文件的权限是:$perm。"4.3用好判断式子任务2利用判断符号[]分析:需要利用中括号、&&与||。[root@wwwscripts]#vish06.sh#!/bin/sh#2019/12/8 申海杰read-p"请回答(y/n):"answer["$answer"=="y"-o"$answer"=="Y"]&&echo"是"&&exit0["$answer"=="n"-o"$answer"=="N"]&&echo"否"&&exit0echo"不知道"&&exit04.3用好判断式子任务3使用Shellscript的默认变量($0,$1...)那么,script是怎么实现这个功能的呢?其实script针对参数已经设置好了一些变量名称。对应如下:/path/to/scriptnameopt1opt2opt3opt4$0$1$2$3$44.3用好判断式子任务3使用Shellscript的默认变量($0,$1...)[root@wwwscripts]#vimsh07.sh#!/bin/sh#2019/12/8 申海杰echo"本脚本程序的名字是:$0“echo"你执行本脚本时提供的参数个数是:$#“["$#"-lt2]&&echo"你提供的参数少于两个,程序停止执行。"&&exit0echo"你提供的所有参数是:$@“echo"第一个参数是:$1“echo"第二个参数是:$2"4.3用好判断式子任务4shift:造成参数变量号码偏移[root@wwwscripts]#vish08.sh#!/bin/bash#2019/12/8 申海杰echo"参数个数是:$#“echo"所有参数:$@“shiftecho"参数个数是:$#“echo"所有参数:$@“shift3echo"参数个数是:$#“echo"所有参数:$@"4.4使用条件判断式子任务1利用if…then1.单层、简单条件判断式如果你只有一个判断式要进行,那么我们可以简单地这样做:if[条件判断式];then
当条件判断式成立时,可以进行的命令工作内容;fi<==将if反过来写,就成为fi了!结束if之意!
&&代表AND;
||代表or。4.4使用条件判断式子任务1利用if…then[root@wwwscripts]#cpsh06.shsh06-2.sh<==这样改得比较快[root@wwwscripts]#vimsh06-2.sh#!/bin/bash#2019/12/8 申海杰read-p"请回答(y/n):"answerif["$answer"=="y"]||["$answer"=="Y"];then echo"是" exit0fiif["$answer"=="n"]||["$answer"=="N"];then echo"否“ exit0fiecho"不知道"&&exit04.4使用条件判断式子任务1利用if…then2.多重、复杂条件判断式#一个条件判断,分成功进行与失败进行(else)if[条件判断式];then
当条件判断式成立时,可以进行的命令工作内容;else
当条件判断式不成立时,可以进行的命令工作内容;fi4.4使用条件判断式子任务1利用if…then2.多重、复杂条件判断式如果考虑更复杂的情况,则可以使用:#多个条件判断(if…elif…elif…else)分多种不同情况运行if[条件判断式一];then
当条件判断式一成立时,可以进行的命令工作内容;elif[条件判断式二];then
当条件判断式二成立时,可以进行的命令工作内容;else
当条件判断式一与二均不成立时,可以进行的命令工作内容;fi4.4使用条件判断式子任务1利用if…then[root@wwwscripts]#cpsh06-2.shsh06-3.sh[root@wwwscripts]#vish06-3.sh#!/bin/bash#2019/12/8 申海杰read-p"请回答(y/n):"answerif["$answer"=="y"]||["$answer"=="Y"];then echo"是“elif["$answer"=="n"]||["$answer"=="N"];then echo"否“else echo"不知道“fi4.4使用条件判断式子任务1利用if…then[root@wwwscripts]#vimsh09.sh#!/bin/bash#2019/12/8 申海杰if["$1"=="start"];then echo"服务启动中。。。"elif["$1"==""];then echo"你必须提供参数,格式:{$0参数}"else echo"允许的参数是start,格式:{$0start}“fi4.4使用条件判断式子任务1利用if…then[root@www~]#netstat-tulnActiveInternetconnections(onlyservers)ProtoRecv-QSend-QLocalAddressForeignAddressStatetcp00:111:*LISTENtcp00:631:*LISTENtcp00:25:*LISTENtcp00:::22:::*LISTENudp00:111:*udp00:631:*#封包格式
本地IP:端口
远程IP:端口
是否监听4.4使用条件判断式子任务1利用if…then[root@wwwscripts]#vimsh10.sh#!/bin/bash#2019/12/8 申海杰echo"本程序会检测你的Linux系统已开启的服务信息,包括ssh服务、www服务。“testing=$(netstat-tuln|grep'.*:22.*’)if["$testing"!=""];then echo"你的系统正在运行ssh服务。“fitesting=$(netstat-tuln|grep'.*:80.*’)if["$testing"!=""];then echo"你的系统正在运行www服务。“fi4.4使用条件判断式子任务1利用if…then[root@wwwscripts]#vimsh11.sh#!/bin/bash#2019/12/8 申海杰echo"这个程序会显示你还有多久毕业。“read-p"请输入你入学的时间(例如20190901):"indatedate1=$(echo$indate|grep'[0-9]\{8\}’)if["date1"==""];then echo"你输入的日期不符合要求。“ exit1fi4.4使用条件判断式子任务1利用if…thenindate_s=`date--date="$indate"+%s`outdate_s=$(($indate_s+365*4*24*60*60))nowdate_s=`date+%s`result=$((($outdate_s-$nowdate_s)/60/60/24))if["$result"-lt"0"];then echo"你在$((-1*$result))天前已经毕业了!“Else echo"你还有$result天毕业!“fi4.4使用条件判断式子任务2利用case…esac判断case$变量名称in <==关键字为case,变量前有$符"第一个变量内容") <==每个变量内容建议用双引号括起来,关键字则为小括号)
程序段 ;; <==每个类别结尾使用两个连续的分号来处理"第二个变量内容")
程序段 ;;*) <==最后一个变量内容都会用*来代表所有其他值
不包含第一个变量内容与第二个变量内容的其他程序运行段 exit1 ;;esac <==最终的case结尾!思考一下case反过来写是什么4.4使用条件判断式子任务2利用case…esac判断[root@wwwscripts]#vimsh09-2.sh#!/bin/bash#2019/12/8 申海杰case$1in "start") echo"服务启动中。。。“ ;; "") echo"你必须提供参数,格式:{$0参数}“ ;; *) echo"允许的参数是start,格式:{$0start}“ ;;esac4.4使用条件判断式子任务2利用case…esac判断下面以一个例子来进一步说明:让用户输入start|restart|stop,并且将用户的变量显示到屏幕上,如果不是start|restart|stop时,就告诉用户仅有这三种选择。[root@wwwscripts]#vimsh12.sh#!/bin/bash#2019/12/8 申海杰echo"这个程序将根据你输的参数执行不同的操作。“#read-p"请输入你要执行的功能:"choice#case$choicein4.4使用条件判断式子任务2利用case…esac判断case$1in "start") echo"服务启动中。。。“ ;; "restart") echo"服务重启中。。。“ ;; "stop") echo"服务停止中。。。“ ;; *) echo"使用方法:$0{start|restart|stop}“ ;;esac4.4使用条件判断式子任务3利用function功能我们将sh12.sh改写一下,自定义一个名为printit的函数:[root@wwwscripts]#vimsh12-2.sh#!/bin/bash#2019/12/8 申海杰functionpri(){ echo-n"服务正在“}echo"这个程序将根据你输的参数执行不同的操作。“#read-p"请输入你要执行的功能:"choice#case$choicein4.4使用条件判断式子任务3利用function功能case$1in "start") pri;echo"启动中。。。“ ;; "restart") pri;echo"重启中。。。“ ;; "stop") pri;echo"停止中。。。“ ;; *) echo"使用方法:$0{start|restart|stop}“ ;;esac4.4使用条件判断式子任务3利用function功能我们将上面的例子再次改写一下:[root@wwwscripts]#vimsh12-3.sh#!/bin/bash#2019/12/8 申海杰functionpri(){ echo"服务正在$1“}echo"这个程序将根据你输的参数执行不同的操作。“#read-p"请输入你要执行的功能:"choice#case$choicein4.4使用条件判断式子任务3利用function功能case$1in "start") pri"启动中。。。“ ;; "restart") pri"重启中。。。“ ;; "stop") pri"停止中。。。“ ;; *) echo"使用方法:$0{start|restart|stop}“ ;;esac4.5使用循环(loop)
1.
whiledodone,untildodone(不定循环)
2.for…do…done(固定循环)
3.for…do…done的数值处理4.5.1whiledodone,untildodone(不定循环)一般来说,不定循环最常见的就是底下这两种状态了。while[condition] <==中括号内的状态就是判断式do <==do是循环的开始!
程序段落done <==done是循环的结束4.5使用循环(loop)4.5.1whiledodone,untildodone(不定循环)while的中文是“当....时”,所以,这种方式说的是“当condition条件成立时,就进行循环,直到condition的条件不成立才停止”的意思。还有另外一种不定循环的方式:until[condition]do
程序段落done4.5使用循环(loop)4.5.1whiledodone,untildodone(不定循环)[root@wwwscripts]#vimsh13.sh#!/bin/bash#2019/12/8 申海杰while["$answer"!="yes"-a"$answer"!="YES"]do read-p"输入yes或者YES停止程序:"answerdoneecho"你的输入时正确的!"4.5使用循环(loop)4.5.1whiledodone,untildodone(不定循环)那如果使用until呢?[root@wwwscripts]#vimsh13-2.sh#!/bin/bash#2019/12/8 申海杰until["$answer"=="yes"-o"$answer"=="YES"]do read-p"输入yes或者YES停止程序:"answerdoneecho"你的输入时正确的!"4.5使用循环(loop)4.5.1whiledodone,untildodone(不定循环)如果想要计算1+2+3+....+100的值。利用循环,可以这样写程序:[root@wwwscripts]#vimsh14.sh#!/bin/bash#2019/12/8 申海杰s=0i=0while["$i"!="100"]do i=$(($i+1)) s=$(($s+$i))doneecho"1到100的所有数字的和是:$s"4.5使用循环(loop)4.5.2for…do…done(固定循环)while、until的循环方式必须要符合某个条件的状态,而for这种语法则是已经知道要进行几次循环的状态。语法如下所示:forvarincon1con2con3...do
程序段done4.5使用循环(loop)4.5.2for…do…done(固定循环)假设有4个学生,分别是张三李四王五赵六,如果每一行都按“学生:...”之类的样式输出,则可以如此撰写程序:[root@wwwscripts]#vimsh15.sh#!/bin/bash#2019/12/8 申海杰forstudin张三李四王五赵六do echo"学生:$stud“done4.5使用循环(loop)4.5.2for…do…done(固定循环)程序如下:[root@wwwscripts]#vimsh16.sh#!/bin/bash#2019/12/8 申海杰users=$(cut-d':'-f1/etc/passwd)forusernamein$usersdo id$username|grep'.*id=5..(.*’done4.5使用循环(loop)4.5.2for…do…done(固定循环)举例来说,我想要利用ping这个可以判断网络状态的命令来进行网络状态的实际检测,要侦测的域是本机所在的~00。由于有100台主机,总不会要我在for后面输入1到100吧?此时可以这样撰写程序:[root@wwwscripts]#vimsh17.sh#!/bin/bash#2019/12/8 申海杰network="192.168.1” #先定义一个网络号(网络ID)4.5使用循环(loop)4.5.2for…do…done(固定循环)forhostin$(seq110)do ping-c1-w1$network.$host>/dev/null&&result=0||result=1 if["$result"=="0"];then echo"$network.$host可以ping通。“ else echo"$network.$hostping不通。“ fidone4.5使用循环(l
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 机械加工课程设计
- 机械加工基础课程设计
- 城市更新多样化实施路径及其解析模型
- 2024九年级英语下册 Unit 9 CommunicationLesson 50 Tips for Good Communication词句梳理教学设计(新版)冀教版
- 机械产品开发课程设计
- 机械专业液压的课程设计
- 机房上机C语言课程设计
- 机床加紧机构课程设计
- 机场规划与设计课程设计
- 广东省肇庆市高中英语 Unit 3 The Million Pound Bank NoteExplain the paper of the exercises at night(the second week)教案 新人教版必修3
- 保单样本模版
- 行业变革下的专业知识更新与迭代
- 《草船借箭》教学案例(5篇)
- 房屋租赁运营服务投标方案(技术方案)
- 第三章地图数学基础
- 初中地理质量分析
- 煤矿井下水力压裂增透抽采技术
- 大班健康PPT课件之《均衡饮食最健康》
- 谈铁路企业安全文化建设
- 农机修理工考试农机修理中级工试卷(农机修理工考试)
- 美国人才引进的政策机制
评论
0/150
提交评论