Linux操作系统应用实战 课件 项目9 编写Shell脚本_第1页
Linux操作系统应用实战 课件 项目9 编写Shell脚本_第2页
Linux操作系统应用实战 课件 项目9 编写Shell脚本_第3页
Linux操作系统应用实战 课件 项目9 编写Shell脚本_第4页
Linux操作系统应用实战 课件 项目9 编写Shell脚本_第5页
已阅读5页,还剩67页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

项目9编写Shell脚本任务1简单的shellscript编写任务2shellscripts进阶项目导入如果想要管理好属于自己的主机,以及后续工作中想要一路高歌,学习shell脚本(Shellscript)是必不可少的。Shellscript类似于早期的批处理工具,即将一些命令汇总起来一次性执行。但是shellscript功能更强大,,那就是它可以进行类似程序(program)的撰写,并且不需要进过编译(compile)即可运行,非常方便。同时我们还可以通过shellscript来简化我们日常的运维管理工作。在整个Linux的环境中,一些服务(service)的启动都是通过shellscript来运行的,一旦出现问题,是一件非常头疼的事情。职业能力目标和要求1.理解shellscript2.熟练掌握判断式语法的运用3.熟练掌握条件判断式语法的运用4.熟练掌握循环语法的运用5.了解中国计算机发展历程,坚定二十大中的深入实施人才强国战略项目9编写Shell脚本简单的shellscript编写任务1任务介绍任务1随着河北唐讯信息技术股份有限公司的日益发展,项目部门最新入职了10人,为新入职员工注册账号,人事部门已经提供了一份人员名单””,作为网络管理员,已经把这份名单copy到了/tangxun/user/,要求密码10位,并且尽量复杂,初始密码不可重复。基于以上要求,网络管理员小李决定使用shellscript进行创建。人员名单如表9-1任务介绍任务1任务分析任务1要实现利用shellscript进行人员账号创建,可以分为以下几个步骤步骤一:确定人员名单步骤二:了解随机数值的参数步骤三:shellscript基本参数步骤四:完成shellscript的编写任务准备:9.1.1shellscript概述任务1shellscript就像是早期DOS年代的批处理(.bat),最简单的功能就是将许多命令写在一起,让使用者很轻易地就能够处理复杂的操作(运行一个文件“shellscript”,就能够一次运行多个命令)。shellscript能提供数组、循环、条件与逻辑判断等重要功能,让用户也可以直接以shell来撰写程序,而不必使用类似C程序语言等传统程序撰写的语法。shellscript可以被简单地看成是批处理文件,也可以被说成是一个程序语言,并且这个程序语言都是利用shell与相关工具命令组成的,所以不需要编译即可运行。另外,shellscript还具有不错的排错(debug)工具,所以,它可以帮助系统管理员快速地管理好主机。任务准备:9.1.2编写并执行shellscript程序任务11.编写shellscript的注意事项①命令的实行是从上至下,从左至右进行的;②命令、选项与参数之间的多个空格会被忽略③空白行将被忽略,”Tab”缩进也会被视为空格④如果读取到一个Enter符号(CR),就尝试开始运行该行(或该串)命令。⑤如果一行的内容太多,则可以使用“\[Enter]”来延伸至下一行。⑥“#”可以作为注解,任何加在#后面的数据将全部被视为注解文字而被忽略。⑦shellscript文件的第一行是个例外,”#”后面的惊叹号会告诉shell用哪个shell来运行脚本,而不是将后面的文字忽略。任务准备:9.1.2编写并执行shellscript程序任务12.运行shellscript程序现在假设程序文件名是/root/sh/shell.sh,但是我们应该如何去运行这个程序文件呢?(1)直接命令下达:shell.sh文件必须要具备可读与可运行(rx)的权限。绝对路径:使用/root/sh/shell.sh来下达命令。相对路径:假设工作目录在/root/sh/目录下,则使用./shell.sh来运行。变量“PATH”功能:将shell.sh放在PATH指定的目录内,如~/bin/。(2)以bash程序来运行:通过“bashshell.sh”或“shshell.sh”来运行。由于linux默认使用者家目录下的~/bin目录会被设置到$PATH内,所以也可以将shell.sh创建在/root/sh/bin/下面(~/bin目录需要自行设置)。此时,若shell.sh在~/bin内且具有rx的权限,直接输入shell.sh即可运行该脚本程序。任务准备:9.1.2编写并执行shellscript程序任务13.编写一个shellscript程序【实例9-1】简单script:hicentos任务准备:9.1.2编写并执行shellscript程序任务1知识链接:在使用”echo$?”查看运行的结果时,返回值为0表示运行成功,返回值非零即表示运行错误。精益求精:查看编写的shellscript是否可以执行成功,以及返回值为错误的情况。任务准备:9.1.3养成良好的编写习惯任务1养成良好的script编写习惯,即在每个script的文件头处包含以下信息:①script的功能②版本信息③作者与联系方式④版权声明方式⑤历史记录⑥script内比较特殊的命令,使用绝对路径来执行该命令⑦运行时需要的环境变量预先进行声明并进行设置任务准备:9.1.4简单的shellscript任务11.交互式脚本:变量内容由使用者决定很多时候,需要使用者输入一些内容,以便脚本来顺利运行【实例9-2】使用read命令编写一个脚本。显示,“Pleaseinputanumber:”进行提示让用户输入数值,然后在屏幕显示”Thenumberyouenteredis:”任务准备:9.1.4简单的shellscript任务1知识链接:交互式脚本的实现是依靠”read-p”参数精益求精:实现执行脚本时呈现交互”请输入网卡名称”,并完成网卡信息的查看任务准备:9.1.4简单的shellscript任务12.数值运算:简单的加减乘除可以使用declare来定义变量的类型,利用”$((计算式))”来进行数值运算。但是比较可惜的是,bashshell默认仅支持到整数。【实例9-3】要求用户输入两个变量,然后将两个变量的内容进行相乘,最后输出相乘的结果。任务准备:9.1.4简单的shellscript任务1知识链接:在数值的运算上,可以使用“declare-itotal=$firstnu*$secnu”,也可以使用上面的方式来表示。建议使用下面的方式进行运算:var=$((运算内容))至于数值运算上的处理,则有+、-、*、/、%等,其中%是取余数。精益求精:使用echo计算240除以4任务准备:9.1.4简单的shellscript任务13.浮点计算bashshell数学运算符只支持整数运算。若要进行任何实际的数学计算,这是一个巨大的限制。有几种解决方案能够克服bash中数学运算的整数限制。最常见的方案是用内建的bash计算器,叫作bc。【实例9-4】可以在shell提示符下通过bc命令访问bash计算器:任务准备:9.1.4简单的shellscript任务1【实例9-5】bc除法[root@localhost~]#bc-qscale062.763/512scale=462.763/512.5526说明:scale变量的默认值是0。在scale值被设置前,bash计算器的计算结果不包含小数位。在将其值设置成4后,bash计算器显示的结果包含四位小数。-q命令行选项可以不显示bash计算器冗长的欢迎信息。(2)在脚本中使用bcbash计算器如何在shell脚本中处理浮点运算。我们可以利用命令替换即:variable=$(echo"options;expression"|bc)第一部分options允许你设置变量。如果你需要不止一个变量,可以用分号将其分开,expression参数定义了通过bc执行的数学表达式。任务准备:9.1.4简单的shellscript任务1【实例9-6】脚本中运用bc计算器[root@localhostsripts]#catcalculator.sh#!/bin/bash#thisiscalculatortestshellscriptvar1=$(echo"scale=4;73.44/5"|bc)echo"Theansweris$var1"这个例子将scale变量设置成了四位小数,并在expression部分指定了特定的运算。运行这个脚本会产生如下输出。[root@localhostsripts]#shcalculator.shTheansweris14.6880任务准备:9.1.4简单的shellscript任务1知识链接:bc计算器可以中的数值可以用变量来代替,脚本中同样适用。精益求精:让使用者输入圆的半径,利用bc计算器来计算圆的面积任务准备:9.1.4简单的shellscript任务1【实例9-7】利用source执行脚本[root@localhostsripts]#sourcesript02.sh //source执行sript02.shPleaseinputanumber:9876 //9876为自行输入的Thenumberyouenteredis:9876[root@localhostsripts]#echo$num9876从实例9-7中可以看到变量生效了,因为source对脚本的运行方式可以使用下面的图9-2来说明。sh02.sh会在父程序中运行,因此各项操作都会在原来的bash内生效。这也是为什么当你不注销系统而要让某些写入~/.bashrc的设置生效时,需要使用“source~/.bashrc”而不能使用“bash~/.bashrc”的原因。任务1任务实施1.查看人员名单[root@localhost~]#mkdir-p/tangxun/user/[root@localhost~]#vim/tangxun/user/[root@localhost~]#cat/tangxun/user/ZhangsanLisiWangwuLiuqiXiaowuRendanZhouqiangYangfanHanxuZhuming任务1任务实施2.编辑shellscript。[root@localhostsripts]#catuser.sh#!/bin/bash#Explain:#ThisisascripttocreateauserPATH=/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin:~/binexportPATHUSER=/tangxun/user/forUSERin`cat$USERLIST`;doif!id$USER&>/dev/null;then PASS=`echo$RANDOM|md5sum|cut-c1-10` useradd$USER echo$PASS|passwd--stdin$USER&>/dev/null echo"$USER$PASS">>/tangxun/newcreateuser.list else echo"$USERalreadyexist!" fidone任务1任务实施3.说明USER=/tangxun/user/forUSERin`cat$USERLIST`;doif!id$USER&>/dev/null;then PASS=`echo$RANDOM|md5sum|cut-c1-10` useradd$USER echo$PASS|passwd--stdin$USER&>/dev/null echo"$USER$PASS">>/tangxun/newcreateuser.list elseecho"$USERalreadyexist!" fidone任务1任务实施主程序部分第一段为设置,存放用户名单的路径USER第二段使用for语句在$USER中循环,do做第三段为检查USER列表中的用户是否存在,存在的话该用户创建失败,不存在的话继续执行以下语句第四段中的echo$RANDOM为导入系统函数生成随机数,md5sum会将生成的随机数通过SHA256哈希算法生成一个密码,cut-c1-10为截取前10位数。第五段使用useradd创建用户第六段echo"$PASS"|passwd--stdin$USER就是读取$PASS这个的值给$USER设置密码;&>/dev/null不管正确或者错误信息都输出到/dev/null这个/dev/null类似于垃圾箱/回收站。第七段,为将用户名和密码存放到/tangxun/newcreateuser.list文件中第八段的else用白话解释的话就是否则,即如果名单中的某个用户已经存在第九段为在屏幕显示XXX用户已经存在第十段fi结束第十一段done为完成任务1任务实施4.执行脚本[root@localhostsripts]#chmod+xuser.sh[root@localhostsripts]#./user.sh[root@localhostsripts]#cd/tangxun/user/[root@localhostuser]#lsnewuser.list[root@localhostuser]#catnewuser.listZhangsan:6ac70689b3Lisi:89244e4e55Wangwu:25458fd71aLiuqi:28812f5027Xiaowu:854882bbd6Rendan:6dad8d0044Zhouqiang:feca4b1d80Yangfan:14b4cbbe82Hanxu:a32282baa3Zhuming:67538c7a9f[root@localhostuser]#cat/etc/passwd.........Zhouqiang:x:1032:1032::/home/Zhouqiang:/bin/bashYangfan:x:1033:1033::/home/Yangfan:/bin/bashHanxu:x:1034:1034::/home/Hanxu:/bin/bashZhuming:x:1035:1035::/home/Zhuming:/bin/bash任务小结任务11.脚本文件的创建即使用编辑器创建一个以sh为扩展名的文件2.在脚本文件的第一行添加以下内容,用于指定解释器#!/bin/bash3.使用#符号可以添加注释,注释内容会被解释器忽略4.在Shell脚本中,变量使用时无需声明类型,直接赋值即可。任务拓展任务1河北唐讯信息技术股份有限公司,近期面试中为检测面试人员的shell相关能力,有一例面试题,使用shellscripts截取http://www.hebeitangxun/home/123.html的字符串,要求分别取出www.hebeitangxun,123.html;http;http://www;hebeitangxun;这些字符串。项目9编写Shell脚本shellscripts进阶任务2任务介绍任务2在河北唐讯信息技术股份有限公司,作为网络管理员的小李为提升工作效力,想要编写一个相关于服务器使用情况的shellscripts,要能执行脚本之后可以查看到:服务器的主网卡IP地址、主机名、cpu的使用情况、iowait的使用情况、内存的使用情况、磁盘的使用情况以及TCP连接状态。任务分析任务2要实现公司服务器的各个情况的显示shellscripts,需要以下几个步骤:步骤一:熟练掌握网卡IP、主机名查看的命令步骤二:熟练掌握查看cpu使用情况的命令步骤三:熟练掌握查看iowait使用情况的命令步骤四:熟练掌握查看内存的使用情况的命令步骤五:熟练掌握shellscripts的各种语法任务准备:9.2.1判断式任务2在前面我们说到过$?这个变量代表的含义。使用echo$?可以判断上一条命令执行的是否正确,例如如果想要查看一个文件,我们使用lsxxx文件,如果这个文件存在,使用echo$?会显示0,说明这个命令执行正确,但是如果我们查看了一个不存在的文件,使用echo$?会显示非零值,我们命令的格式正确但是文件是不存在的,那么这条命令也是错误的。但是更简单的”条件判断”命令有”test”命令。任务准备:9.2.1判断式任务2一、利用test命令的测试功能当需要检测系统上面某些文件是否是相关属性时,利用test命令是最好的选择。【实例9-8】例如想要查看/root/sripts/sript04.sh是否存在时[root@localhostsripts]#test-e./sript04.sh运行结果不会显示任何信息,但是最后可以通过$?或者&&配合||来显示整个结果。【实例9-9】test配合&&与||来使用查看结果[root@localhostsripts]#test-e./sript04.sh&&echo"exist"||echo"Notexist"Notexist[root@localhostsripts]#test-e./sript03.sh&&echo"exist"||echo"Notexist"exist任务准备:9.2.1判断式任务2最终显示的结果如果为正确的话就会回显exist,否则的话回显Notexisttest命令的-e选项是测试一个文件或者目录是否存在,还有很多选项,如表9-2任务准备:9.2.1判断式任务2【实例9-10】编写shellscript,交互式利用test判断文件是否存在,若不存在则输出”文件不存在”,并退出脚本;若文件存在,则判断该文件是file或者是dir,结果输出为”这是一个file”或者是”这是一个dir”;并判断执行这对于文件的权限,并输出权限。任务准备:9.2.1判断式任务2说明:第5段为显示一段信息提示使用者该文件作用;第6段为交互式,提示使用者输入一个文件名,变量名为filename第7段去判断输入的字符串是否为0,为0的话输出echo的内容,并退出第8段检测filename不存在的话,输出echo的内容,并推出第9段判断是否为文件第10段判断是否为目录第11-13段为判断使用者对filename的权限任务准备:9.2.1判断式任务2运行结果:[root@localhostsripts]#lssript02.shsript03.shsript04.shsript.shuser.sh[root@localhostsripts]#shsript04.shPleaseenterthefilenametodeterminethefileinformation\nPleaseenterthefilename:sript02.shThefiletypeisfileYouhavewpermissionYouhaverpermissionYouhavexpermission任务准备:9.2.1判断式任务2二、利用判断符合[]进行判断时,除了test这个命令之外,还有”[]”中括号符号来进行数据的判断。【实例9-11】例如判断PATH变量是否为空[root@localhost~]#[-z"$PATH"];echo$?1-z选项的含义为判断长度是否为空为0,为空为0则为true,故返回值为1。在使用中括号时需要注意的是,中括号用在很多地方,比如正则表示式和通配符等,所以如果要使用中括号在bash的语法中作为判断式,必须要做注意在中括号两端需要有空格来分割。假设空格用□来表示的话即为[□”$PATH”□==□”$MAIL”□]任务准备:9.2.1判断式任务2【实例9-12】例如,假设我们设置name=hbtx[root@localhostsripts]#name="hbtxhbTangx"[root@localhostsripts]#[$name=="tangxun"]bash:[:参数太多知识链接:比较运算符,用于比较两个值之间的关系;逻辑运算符,用于组合和操作多个条件;字符串比较,用于比较字符串的内容;文件判断,用于判断文件的属性和状态。

精益求精:利用中括号的判断,实现当运行一个程序的时候,这个程序会让用户选择Y或N,如果用户输入Y或y,就显示“OK,continue”,如果用户输入n或N,就显示“Oh,interrupt!”,若都不是则显示您输入的不是Y/N任务准备:9.2.1判断式任务2[root@localhostsripts]#catsript05.sh#!/bin/bashread-p"Pleaseinput(Y/N)"yn["$yn"=="Y"-o"$yn"=="y"]&&echo"OK,continue"&&exit0["$yn"=="N"-o"$yn"=="n"]&&echo"OK,continue"&&exit0echo"您输入的不是Y/N"&&exit0运行:[root@localhostsripts]#shsript05.shPleaseinput(Y/N)yOK,continue[root@localhostsripts]#shsript05.shPleaseinput(Y/N)l您输入的不是Y/N任务准备:9.2.1判断式任务2三、shellscript的默认变量我们都知道命令可以带有选项以及参数,例如ls-la可以查看所有文件包括隐藏文件的全部属性。执行Shellscript也是可以带参数的。1、文件参数变量在执行脚本时,可以向脚本传递参数。$1是第一个参数,$2是第二个参数,以此类推,然后还有$0这个变量,该变量的意思是文件名。任务准备:9.2.1判断式任务2【实例9-13】$1,$2,$0参数变量的使用[root@localhostsripts]#catsript.sh#!/bin/bash#Thisisatestscript#Time:#2023年06月27日,星期二echo"文件命令是:"$0echo"第一个参数:"$1echo"第二个参数:"$2执行:[root@localhostsripts]#shsript.shaaabbb文件命令是:sript.sh第一个参数:aaa第二个参数:bbbShell脚本后面的第一个参数即为$1,第二个为

$2,以此类推任务准备:9.2.1判断式任务2【实例9-14】$(command)与`command`的示范[root@localhostsripts]#catsript.sh#!/bin/bash#Thisisatestscript#Time:#2023年06月27日,星期二echo"当前位置是:`pwd`" //该行使用了``传参符号,执行pwd命令echo"当前位置是:pwd" //该行没有使用任何符号,直接输入pwd命令echo"当前位置是:$(pwd)" //该行使用$()变量,后执行pwd命令执行:[root@localhostsripts]#shsript.sh当前位置是:/root/sripts //该行使用``进行传参,执行pwd成功当前位置是:pwd //该行没有加入任何参数,执行pwd失败当前位置是:/root/sripts //使用$(),执行pwd成功任务准备:9.2.1判断式任务2知识链接:不同的Shell解释器可能会有一些差异,上述变量在不同的Shell中可能会有所不同。此外,还有一些环境变量,如PATH、LANG等,在Shell脚本中也可以使用。精益求精:使用$1.....等位置变量完成加减乘除。任务准备:9.2.1判断式任务2执行:[root@localhostsripts]#shsript10.sh23923+9=3223-9=1423*9=20723/9=2[root@localhostsripts]#shsript10.sh23请输入2个数值,格式为sript10.sh12任务准备:9.2.2使用条件判断任务2一、利用if...thenif…then是最常见的条件判断式。简单地说,就是当符合某个条件判断的时候,就进行某项工作。if…then的判断还有多层次的情况1.单层、简单条件判断式如果只有一个判断式要进行,可以简单的这样if[条件判断式];then当条件判断式成立时,可以进行的命令工作内容;fi<==将if反过来写,就成为fi了,结束if之意任务准备:9.2.2使用条件判断任务2【实例9-15】if....then判断[root@localhostsripts]#catsript06.sh#!/bin/bashread-p"Pleaseinput(Y/N):"ynif["$yn"=="Y"]||["$yn"=="y"];then echo"OK,continue" exit0fiif["$yn"=="N"]||["$yn"=="n"];then echo"Oh,interrupt!" exit0fi任务准备:9.2.2使用条件判断任务2运行:[root@localhostsripts]#shsript06.shPleaseinput(Y/N):s[root@localhostsripts]#shsript06.shPleaseinput(Y/N):yOK,continue任务准备:9.2.2使用条件判断任务2知识链接:if语句:if语句用于执行基于条件的分支。精益求精:在if语句行故意放了一个不能工作的命令,查看情况[root@localhostsripts]#catsript07.sh#!/bin/bashifnotthen echo"Itworked"fiecho"Weareoutsidetheifstatement"任务准备:9.2.2使用条件判断任务2二、多个条件判断(if...elif...elif...else)分多种不同情况运行if[条件判断式一];then当条件判断式一成立时,可以进行的命令工作内容;elif[条件判断式二];then当条件判断式二成立时,可以进行的命令工作内容;else当条件判断式一与二均不成立时,可以进行的命令工作内容;fi任务准备:9.2.2使用条件判断任务2【实例9-16】实现if...elif...else语句[root@localhostsripts]#catsript06.sh#!/bin/bashread-p"请输入(Y/N):"ynif["$yn"=="Y"]||["$yn"=="y"];then echo"您输入的是Y"elif["$yn"=="N"]||["$yn"=="n"];then echo"您输入的是N!"else echo"请输入(Y/N)"fi执行:[root@localhostsripts]#shsript06.sh请输入(Y/N):y您输入的是Y[root@localhostsripts]#shsript06.sh请输入(Y/N):n您输入的是N![root@localhostsripts]#shsript06.sh请输入(Y/N):d请输入(Y/N)任务准备:9.2.2使用条件判断任务2知识链接:if语句:if语句用于执行基于条件的分支。精益求精:利用位置变量$1...,让执行者在运行脚本时就将参数带进去,判断$1是否为hello,是的话显示”hello,user”,若没有加入参数则提示使用者必须添加参数,若不是hello则提示只能使用hello参数任务准备:9.2.2使用条件判断任务2三、利用case...in..esac进行判断case$变量名称in<==关键字为case,变量前有$符"第一个变量内容")<==每个变量内容建议用双引号括起来,关键字则为小括号)程序段;;<==每个类别结尾使用两个连续的分号来处理"第二个变量内容")程序段;;*)<==最后一个变量内容都会用*来代表所有其他值不包含第一个变量内容与第二个变量内容的其他程序运行段exit1;;esac<==最终的case结尾!思考一下case反过来写是什么任务准备:9.2.2使用条件判断任务2【实例9-17】使用case语法任务准备:9.2.3使用循环任务2一、whiledodone,untildodone(不定循环)一般来说,不定循环最常见的就是底下这两种状态了while[condition]<==中括号内的状态就是判断式

do<==do是循环的开始!

程序段落

done<==done是循环的结束while的中文是“当……时”,所以,这种方式说的是“当condition条件成立时,就进行循环,直到condition的条件不成立才停止”的意思。还有另外一种不定循环的方式:until[condition]

do

程序段落

done这种方式恰恰与while相反,它说的是当condition条件成立时,就终止循环,否则就持续运行循环的程序段。我们以while来做个简单的练习。假设要让用户输入yes或者是YES才结束程序的运行,否则就一直运行并告诉用户输入字符。任务准备:9.2.3使用循环任务2【实例9-18】while循环[root@localhostsripts]#catsript08.sh#!/bin/bashPATH=/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin:~/binexportPATHwhile["$yn"!="yes"-a"$yn"!="YES"]do read-p"Pleaseinputyes/YEStostopthisprogram:"yndone echo"OK!youinputthecorrectanswer."运行:[root@localhostsripts]#shsript08.shPleaseinputyes/YEStostopthisprogram:yesOK!youinputthecorrectanswer.任务准备:9.2.3使用循环任务2知识链接:whiledodone在大部分比较实用的脚本中是常见的。精益求精:实现脚本进行后缀名的更换[root@localhostsripts]#catsript09.sh#!/bin/bashread-p"Pleaseinputtheusername:"userwhile:doifwho|grep-qw$user then echo$userlogin.else echo$usernotloginfi任务准备:9.2.3使用循环任务2二、使用for...do...done循环while和until进行循环必须要符合某一个条件,这一小节的for循环则是已经知道要进行几次循环。语法格式如下:forvarinonetowthree..do程序内容done以上语法格式意思为:第一次循环时,$var的内容为one,第二次为tow,第三次的内容为three。我们之前编写的批量创建用户的脚本即是这个原理。任务准备:9.2.3使用循环任务2【实例9-19】假设有三种动物,cat、dog、bird,没执行一行都按”动物园里有cat”之类的样式进行输出。[root@localhostsripts]#catsript13.sh#!/bin/bashPATH=/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin:~/binexportPATHforzoonincatdogbirddo echo"动物园里有$zoon"done执行:[root@localhostsripts]#shsript13.sh动物园里有cat动物园里有dog动物园里有bird任务准备:9.2.3使用循环任务2【实例9-20】获取主机的所有用户[root@localhostsripts]#catuserlist.sh#!/bin/bashPATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/binexportPATHuser=`awk-F:'{print$1}'/etc/passwd`forUin$userdo echo"$Uand'id$U`AND">>/tangxun/userlist.txtdone任务准备:9.2.3使用循环任务2执行:[root@localhostsripts]#shuserlist.sh[root@localhostsripts]#cd/tangxun/[root@localhosttangxun]#lsuserlist.txt[root@localhosttangxun]#catuserlist.txtrootanduid=0(root)gid=0(root)组=0(root)binanduid=1(bin)gid=1(bin)组=1(bin)daemonanduid=2(daemon)gid=2(daemon)组=2(daemon)admanduid=3(adm)gid=4(adm)组=4(adm)lpanduid=4(lp)gid=7(lp)组=7(lp)syncanduid=5(sync)gid=0(root)组=0(root)shutdownanduid=6(shutdown)gid=0(root)组=0(root)........任务准备:9.2.3使用循环任务2【实例9-21】查找活动ip[root@localhostsripts]#catping.sh#!/bin/baships="192.168.100."foriin`seq1254`do ping-c2$ips$1>/dev/nullif[$?==0]then echo"$ip$iisonline"else echo"$ip$iisnotonline"fidone任务准备:9.2.3使用循环任务2执行:[root@localhostsripts]#shping.sh1isnotonline2isonline3isnotonline.......实例9-21中重点为seq命令,该命令是sequence连续的意思,代表后面的两个数字都是连续的,这样就可以把这些数字带入到程序中。任务准备:9.2.3使用循环任务2三、for...do...done数值处理除了之前讲倒的方法意外,for循环还有一种语法:for((初始值,限制值;执行步长))do程序内容done这种语法适用于数值方式的运算,在for后面的括号内的参数含义如下:初始值:某个变量在循环当中的起始位置,好比与i=1.限制值:最大值,奖值范围控制在这个范围内。执行不长:每次循环之后,变量的变化量,设置2的话为1,3,5任务准备:9.2.3使用循环任务2【实例9-22】基于这种语法,来修改ping.sh[root@localhostsripts]#catping.sh#!/bin/baships="192.168.100."for((i=1;i<=10;i=i+1))do ping-c2$ips$i>/dev/nullif[$?==0]then echo"$ip$iisonline"else echo"$ip$iisnotonline"fidone设置从1开始,每次+1,截止到10。任务准备:9.2.4对shellscript进行调试任务2script在运行之前,最怕的就是出现语法错误问题了!那么我们该如何调试呢?有没有办法不需要运行该script就可以判断是否有问题呢?当然是有的!下面就直接以bash的相关参数来进行判断。格式:sh[nvx]script.sh选项与参数:-n:不要执行script,仅查询语法的问题。-v:在执行script前,先将script的内容输出到屏幕上。-x:将使用到的script内容显示到屏幕上,这是很有用的参数!测试查看script08.sh的语法是否有错误[root@localhostsripts]#sh-nsript08.sh没有错误的话不会显示任何信息将srcipt08.sh的运行过程全部列出来任务准备:9.2.4对shellscript进行调试任务2[root@localhostsripts]#sh-xsript08.sh+PATH=/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin:/root/bi

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论