版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
项目9SHELL编程基础主讲:***2024年1月2日Linux应用基础项目化教程(RHEL8.2/CentOS8.2)12024年1月2日Linux应用基础项目化教程(RHEL8.2/CentOS8.2)2本项目学习目标:1.知识目标2.能力目标掌握Shell的基本概念;掌握Shell的基本语法;掌握Shell的程序流程控制方法;了解Shell程序的应用。能熟练使用Vim等文本编辑器编写Shell程序;能熟练使用顺序、分支、循环等程序流程结构;能编写简单的Shell程序;能实现文件检测、批量处理等任务。2024年1月2日Linux应用基础项目化教程(RHEL8.2/CentOS8.2)3学习任务任务9.1Shell概述任务9.2Shell的基本语法任务9.3Shell程序流程控制任务9.4Shell的应用2024年1月2日Linux应用基础项目化教程(RHEL8.2/CentOS8.2)4任务9.1Shell概述Shell是一个用C语言编写的程序,它是用户使用Linux的桥梁。为用户提供了一个界面,用户通过这个界面可以访问操作系统内核提供的服务。2024年1月2日Linux应用基础项目化教程(RHEL8.2/CentOS8.2)5Shell的基本功能有助于编写更好的Shell程序,在执行Shell命令时,多条命令可以在一个命令行上执行,但要使用分号(;)分隔命令。使用Shell编程时应注意以下几点:(1)Shell命令区分英文字母大小写;(2)应在Shell程序中加入必要的注释,以便查询和维护,注释以“#”开头;(3)对Shell变量进行数学运算时,使用乘法符号“*”时,要用转义字符“\”进行转义;(4)Shell对程序中多余的空格不进行任何处理,用户可以利用这一特性调整程序缩进,增强程序的可读性。2024年1月2日Linux应用基础项目化教程(RHEL8.2/CentOS8.2)69.1.1Shell分类Shell分为图形界面Shell(GraphicalUserInterfaceShell,GUIShell)和命令行Shell(CommandLineInterfaceShell,CLIShell)两种,常见的图形界面Shell包括应用广泛的WindowsExplorer和LinuxShell,其中LinuxShell又包括XWindow、GNOME、KDE、Xfce等。Shell提供了用户与操作系统之间的通信方式。这种通信可以以交互(从键盘输入,且可以立即得到响应)或非交互(ShellScript)的方式进行。ShellScript是放在文件中的一个Shell和操作系统的命令,它们可以被重复使用。2024年1月2日Linux应用基础项目化教程(RHEL8.2/CentOS8.2)7Bash是UNIXShell的一种,是一个命令处理器,通常运行于文本窗口中,并能执行用户直接输入的命令。Bash还能从文件中读取命令,这样的文件称为脚本。和其他UNIXShell一样,它支持文件名替换(通配符匹配)、管道、命令替换、变量,以及条件判断和循环遍历等程序流程控制结构。2024年1月2日Linux应用基础项目化教程(RHEL8.2/CentOS8.2)8任务9.2Shell基本语法Shell程序有很多类似C语言程序和其他语言程序的特征,但是通常又没有那么复杂。Shell程序是指放在一个文件中的一系列Linux命令。在运行Shell程序时,Linux逐个地解释和执行其中的命令。2024年1月2日Linux应用基础项目化教程(RHEL8.2/CentOS8.2)9编写并运行第一个Shell程序(1)输入“vimfirst.sh”命令,新建“first.sh”脚本文件,然后输入“i”命令进入插入模式,输入如下内容:#!/bin/bash#ThisisthefirstBashShellprogram#ScriptName:first.shecho"Hello,thisisfirstBashShellprogram"2024年1月2日Linux应用基础项目化教程(RHEL8.2/CentOS8.2)10(2)输入“wq”命令,保存文件并退出。(3)设置“first.sh”脚本文件的权限,并运行“first.sh”脚本文件。编写完Shell程序后,不能立即运行该程序,需给“first.sh”脚本文件设置可执行的权限。使用如下命令:[root@localhostbin]#chmod+xfirst.sh2024年1月2日Linux应用基础项目化教程(RHEL8.2/CentOS8.2)11方法一,直接运行当前文件夹下的“first.sh”脚本文件,使用如下命令:[root@localhostbin]#./first.sh;方法二,把“first.sh”脚本文件作为一个参数传递给Shell命令:[root@localhostbin]#/bin/bashfirst.sh方法三,使用sh命令运行“first.sh”脚本文件,使用如下命令:shfirst.sh有3种方法运行Shell程序2024年1月2日Linux应用基础项目化教程(RHEL8.2/CentOS8.2)12使用方法三运行Shell程序,运行结果如下图所示2024年1月2日Linux应用基础项目化教程(RHEL8.2/CentOS8.2)13(1)Shell的类型,如例9-2-1中的“#!/bin/bash”指出了Shell的类型为Bash。(2)注释,以“#”开头。(3)Shell变量,用“$”符号表示,如“$”和“${name}”,当变量名的长度为1个字符时,建议使用“$N”的方式,当变量名的长度大于1个字符时,建议使用“${name}”的方式。(4)控制语句。Shell程序的基本元素2024年1月2日Linux应用基础项目化教程(RHEL8.2/CentOS8.2)14(1)编写Shell程序。(2)保存脚本文件并退出。(3)为脚本文件赋予可执行的权限。(4)运行Shell程序及调试。Shell编程的注意事项运行Shell程序的一般步骤(1)Shell程序的脚本文件一般以“.sh”为扩展名,没有扩展名也可执行。(2)Shell程序中有一些特殊符号。例如,“$”为变量符,如“$a”表示变量a的值(变量名的长度超过1个字符时,可用{}括起来);“\”为转义字符,它能把特殊字符变成普通字符。2024年1月2日Linux应用基础项目化教程(RHEL8.2/CentOS8.2)15Shell变量可以用于保存路径名、文件名或数字等。变量分为本地变量和环境变量两种。本地变量即局部变量,只能在创建它们的Shell程序中使用,在Shell程序内可以任意使用和修改本地变量。变量环境变量(1)环境变量可以在命令行界面中设置,但用户被注销时,这些变量将丢失。(2)环境变量的名称一般由英文大写字母组合而成。(3)环境变量必须用export命令导出。2024年1月2日Linux应用基础项目化教程(RHEL8.2/CentOS8.2)16定义变量的语法格式变量名=变量值变量的定义
(1)变量名中只能包括英文字母、数字和下画线,且不能以数字开头。(2)变量名中不能有空格。(3)变量名中不能有标点符号。(4)变量名中不能有Bash中的关键字,如while、if、until等(请自行查阅相关资料了解其他Bash关键字)变量名的命名规则
2024年1月2日Linux应用基础项目化教程(RHEL8.2/CentOS8.2)17(1)等号两边不能有空格。(2)变量的取值可以为空格,若其取值为空格,则必须用双引号括起来。(3)变量名是区分英文字母大小写的。定义变量时的注意事项Shell程序的注释Shell脚本中使用“#”符号进行注释#--------------------------------------------#这是一个注释#作者:#--------------------------------------------以上程序不会被解释器执行。2024年1月2日Linux应用基础项目化教程(RHEL8.2/CentOS8.2)18任务9.3Shell程序流程控制Shell程序结构Shell既是一种命令语言,又是一种程序设计语言。作为命令语言,它交互地解释和执行用户输入的命令或者自动地解释和执行用户预先设置好的一系列命令;作为程序设计语言,它定义了各种变量和参数,并提供了许多在高级语言中才具有的控制结构,包括顺序结构、分支结构、循环结构。2024年1月2日Linux应用基础项目化教程(RHEL8.2/CentOS8.2)19顺序结构是最简单、最常用的控制结构,顺序结构中的程序是按照程序语句的前后顺序依次执行的,用户只需按照解决问题的顺序写出相应的语句即可。9.3.1顺序结构#!/bin/bash#echo"Helloeveryone!"echo"ThisisShellprogramming!"a="A"echo"ais$a"b="Good"echo"bis$b"2024年1月2日Linux应用基础项目化教程(RHEL8.2/CentOS8.2)20顺序结构程序运行结果如下图所示顺序结构2024年1月2日Linux应用基础项目化教程(RHEL8.2/CentOS8.2)21分支结构中的程序依据不同的条件进入程序中不同的模块,不是严格按照语句出现的前后顺序来执行的。在设计分支结构的过程中,需构造合适的分支条件和分析程序流程,根据不同的程序流程选择适当的分支语句。分支结构适用于带有逻辑或关系比较等条件判断的计算。9.3.2分支结构2024年1月2日Linux应用基础项目化教程(RHEL8.2/CentOS8.2)221.单分支结构(if-then)单分支结构用于对程序中的条件进行判断,若条件成立,则执行语句块,若条件不成,立则不执行语句块。单分支结构的语法格式如下:ifconditionthencommand1command2...commandNfi其中,condition是判断条件,如果condition成立(结果为“真”),那么then后边的语句块将会被执行;如果condition不成立(结果为“假”),那么不会执行任何语句。2024年1月2日Linux应用基础项目化教程(RHEL8.2/CentOS8.2)23#!/bin/bash#echo"inputyourage:"readageecho"inputyourscore:"readscoreif(($age>18&&$score<60))then echo"Youareanadult,butyouhavefailedyourexam!"fi例如:输入一个学生的年龄和成绩,当他的年龄大于18且成绩小于60时,输出“Youareanadult,butyouhavefailedyourexam”。2024年1月2日Linux应用基础项目化教程(RHEL8.2/CentOS8.2)242024年1月2日Linux应用基础项目化教程(RHEL8.2/CentOS8.2)252.双分支结构(if-else)双分支结构与单分支结构不同,它对程序中的条件进行判断,若条件成立,则执行语句块1,若条件不成立,则执行语句块2。它根据条件的结果在两个语句块中选择其中一个执行。。双分支结构的语法格式如下:ifconditionthencommand1command2...commandNelsecommandfi其中,如果condition成立,那么then后面的command1,command2,…,commandN语句将会被执行;否则,执行else后面的command语句。2024年1月2日Linux应用基础项目化教程(RHEL8.2/CentOS8.2)26#!/bin/bashreadareadbif(($a>$b))then echo"Themaxnumberis:$a"else echo"Themaxnumberis:$b"fi例如:从键盘上输入两个数,比较两个数的大小,并输出较大的数。2024年1月2日Linux应用基础项目化教程(RHEL8.2/CentOS8.2)272024年1月2日Linux应用基础项目化教程(RHEL8.2/CentOS8.2)283.分支结构的嵌套(if-elif-else)分支结构的嵌套是指在分支结构中又嵌入了分支结构,可以根据实际需要嵌入多层分支结构。若条件成立,则执行语句块1,若条件不成立,则继续判断下一个条件是否成立,若成立,则执行语句块2,若不成立,则执行其他语句块。分支结构嵌套的语法格式如下:ifcondition1thencommand1elifcondition2thencommand2elsecommandNfi如果condition1成立,那么then后面的command1语句会被执行,如果condition1不成立,那么判断下一个条件condition2,如果condition2成立,那么执行command2语句,否则执行else后面的commandN语句。2024年1月2日Linux应用基础项目化教程(RHEL8.2/CentOS8.2)29#!/bin/bashif[$1-eq$2];then echo"$1=$2"elif[$1-gt$2];then echo"$1>$2"elif[$1-lt$2];then echo"$1<$2"elif[$1-ne$2];then echo"$1!=$2"fi例如:从键盘上输入两个数,若这两个数相等,则输出两个数相等的信息,若第1个数大于第2个数,则输出第1个数大于第2个数的信息,若第1个数小于第2个数,则输出第1个数小于第2个数的依靠。2024年1月2日Linux应用基础项目化教程(RHEL8.2/CentOS8.2)302024年1月2日Linux应用基础项目化教程(RHEL8.2/CentOS8.2)314.多分支结构(case)在实际应用过程中经常遇到需要多分支的情况,并且这些分支条件是并列的。在这种情况下,可以使用多分支结构,该结构会根据表达式的值进行测试,当表达式的值满足某一个模式时,执行对应模式下的语句。在多分支结构中,首先计算表达式的值,当表达式的值与模式1相等时,执行模式1后面的command1,commandN语句;当表达式的值与模式2相等时,执行模式2后面的command11,command1N语句。可以根据实际需要设计个多个模式及多个对应的command语句,需要注意的是,每个语句块后面需要有“;;”,并且“;;”不可以省略,如果省略,会导致某些语句不能被执行。多分支结构嵌套的语法格式如下:case表达式的值in模式1)command1command2...commandN;;模式2)command11command12...command1N;;esac2024年1月2日Linux应用基础项目化教程(RHEL8.2/CentOS8.2)32例如:从键盘上输入1~7之间的任意1个数,实现:输入1,则输出今天是星期一;输入2,则输出今天是星期二;输入3,则输出今天是星期三;输入4,则输出今天是星期四;输入5,则输出今天是星期五;输入6,则输出今天是星期六;输入7,则输出今天是星期日;否则提示输入错误。2024年1月2日Linux应用基础项目化教程(RHEL8.2/CentOS8.2)332024年1月2日Linux应用基础项目化教程(RHEL8.2/CentOS8.2)349.3.3循环结构当程序中有需要重复执行的语句时,可以把需要重复执行的语句写在循环体中,然后设计循环条件,使得当满足循环条件时就执行循环体中的语句,直到不满足条件为止,然后退出循环结构。for循环的语法格式如下:forvarinitem1item2...itemNdocommand1command2...commandNdone2024年1月2日Linux应用基础项目化教程(RHEL8.2/CentOS8.2)35【例9-3-6】当变量i<10时,从5开始输出变量i的值。#!/bin/bash#for((i=5;i<10;i++))do echo"Thenumberis$i"done2024年1月2日Linux应用基础项目化教程(RHEL8.2/CentOS8.2)369.3.3循环结构2.while循环while循环用于不断重复执行一系列语句,也用于从输入文件中读取数据。condition通常为测试条件,若条件成立,则执行do与done之间的语句,直到条件不成立时,退出循环。其语法格式如下:while循环的语法格式如下:whileconditiondocommanddone2024年1月2日Linux应用基础项目化教程(RHEL8.2/CentOS8.2)37【例9-3-6】当循环变量的值小于20时,输出循环变量的值。#!/bin/bash#num=10while[$num-lt20]do echo"Thenumberis:$num" ((num++))done2024年1月2日Linux应用基础项目化教程(RHEL8.2/CentOS8.2)38任务9.4Shell应用Shell程序可以实现对操作系统中的用户文件等进行管理。在系统运维等方面,用户可以编写Shell
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2024年物业管理附加协议范本
- 住宅度假置业中介合同(2024年版)
- 购物广场项目实施与管理方案
- 电动汽车智能充电桩项目立项可行性研究报告
- 安置房项目计划书
- 2023年四川成都大学附属医院招聘笔试真题
- 幼儿园中班期末总结
- 翻译员服务合同书(3篇)
- 教师外出学习心得体会
- 2023年呼和浩特中润农业有限公司招聘工作人员笔试真题
- 2024年大学试题(农学)-园艺商品学笔试参考题库含答案
- MOOC 数学物理方程-南京信息工程大学 中国大学慕课答案
- 重点关爱学生帮扶活动记录表
- 分层抽样设计案例分析
- 2023年-2024年食品安全快速检测考试题库及答案
- 幼儿园大班健康绘本《牙齿旅行记》课件
- GB/T 31384-2024旅游景区公共信息导向系统设置规范
- 2024年榆林能源集团有限公司招聘笔试参考题库附带答案详解
- 母语为英语的汉语学习者习得汉语语音的偏误分析及教学对策
- 一病一品糖尿病
- 2024海上风电无人机巡检技术规范
评论
0/150
提交评论