Lin基础及其教程 8_第1页
Lin基础及其教程 8_第2页
Lin基础及其教程 8_第3页
Lin基础及其教程 8_第4页
Lin基础及其教程 8_第5页
已阅读5页,还剩56页未读, 继续免费阅读

下载本文档

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

文档简介

项目9Shell编程基础主讲人:XXX目录CONTENTS任务9.1Shell概述任务9.2Shell的基本语法任务9.3Shell的程序流程控制任务9.4Shell的应用学习目标掌握Shell的基本概念;掌握Shell的基本语法;掌握Shell的程序流程控制方法;了解Shell程序的应用。知识目标能熟练使用Vim等文本编辑器编写Shell程序;能熟练使用顺序、分支、循环等程序流程结构;能编写简单的Shell程序,实现文件检测、批量处理等任务。能力目标培养学生严谨的逻辑思维能力;培养学生形成良好的文档编写习惯;培养学生养成代码优化意识。素质目标任务9.1:Shell概述01Shell简介Shell是用C语言编写的程序,是用户使用Linux的桥梁,既是命令语言,也是程序设计语言。Shell定义Shell功能Shell命令区分大小写,程序中需加入注释(以#开头),数字运算时乘法符号需转义,对多余空格不处理。Shell编程注意事项Shell定义与功能123图1Shell的地位Shell提供界面让用户访问操作系统内核服务,支持多条命令在同一行执行,用分号分隔。02Shell分类图形界面Shell图形界面Shell特点图形界面Shell以图形方式展示,便于用户操作,常见的有WindowsExplorer和LinuxShell中的XWindow、GNOME、KDE、Xfce等。图形界面Shell应用图形界面Shell适用于不熟悉命令行操作的用户,提供直观的交互方式,方便进行文件管理、系统设置等操作。命令行Shell命令行Shell通过命令行与用户交互,支持交互式和非交互式(ShellScript)操作,适合高级用户和自动化任务。命令行Shell特点命令行Shell适用于系统管理员和开发者,用于执行复杂命令、编写脚本实现自动化任务,提高工作效率。命令行Shell应用03BashShellBash简介Bash是UnixShell的一种,由布莱恩·福克斯编写,最初为GNU计划设计,现广泛应用于类Unix系统。Bash定义Bash支持文件名替换、管道、命令替换、变量,以及条件判断和循环遍历的结构控制语句,功能强大。Bash功能Bash常用于文本窗口中执行用户命令,也可从文件中读取命令(脚本),适用于系统管理、自动化任务和软件开发。Bash应用任务9.2:Shell的基本语法01Shell程序基础编写与运行Shell程序编写Shell程序需指定解释器类型(如`#!/bin/bash`),使用`vim`编辑器输入命令,保存为`.sh`文件。①②【例9-2-1】编写并运行第一个Shell程序。输入“vimfirst.sh”,按i进入插入模式,输入如下内容:#!/bin/bash#ThisisthefirstBashshellprogram#ScriptName:first.shecho"Hello,thisisfirstBashshellprogram"输入“:wq”,保存文件并退出。③设置“first.sh”脚本文件的权限,并运行“first.sh”脚本文件。[root@www~]#chmod+xfirst.sh[root@www~]#shfirst.shShell程序编写Shell程序。保存脚本文件并退出。为脚本文件赋予可执行的权限。运行Shell程序及调试。运行Shell程序一般步骤Shell程序的脚本文件一般以“.sh”为扩展名,没有扩展名也可执行。Shell程序中有一些特殊符号。例如,“$”为变量符,如“$a”表示变量a的值(变量名字长度超过1个字符时,可用{}括起来);“\”为转义字符,它能把特殊符号变成普通字符。Shell编程的注意事项Shell的类型,如例9-2-1中的“#!/bin/bash”指出了Shell的类型为Bash。注释,以“#”开头。Shell变量,用“$”符号表示,如“$”和“${name}”,当变量名的长度为1个字符时,建议使用“$N”的方式,当变量名的长度大于1个字符时,建议使用“${name}”的方式。控制语句。Shell程序的基本元素02Shell变量Shell变量类型Shell变量分为本地变量(局部变量)和环境变量(全局变量),环境变量具有继承性。变量的定义与使用变量的定义定义变量的语法格式如下:变量名的命名规则变量名只能包括英文字母、数字和下划线,且不能以数字开头。变量名中不能有空格。变量名中不能有标点符号。变量名中不能有Bash中的关键字,如while、if、until等。定义变量时的注意事项等号两边不能有空格。变量的取值可以为空格,若其取值为空格,则必须用双引号括起来。变量名是区分英文字母大小写的。只读变量使用readonly命令可将变量设置为只读,防止变量值被修改,增强程序稳定性。01020304变量名=变量值03Shell语法格式单引号字符串的示例如下:字符串是Shell程序中常用的数据类型,字符串可以用单引号、双引号定义。Shell字符串str='thisisastring'单引号中的任何字符都会原样输出;单引号中的变量是无效的;单引号中不能出现单一的单引号。双引号字符串的示例如下:os_name='openEuler'str="Hello,Iknowyouare\“$os_name\"!\n"echo-e$str输出结果为:Hello,Iknowyouare"openEuler"!测试test命令Shell中的“test”命令用于测试某个条件是否成立,可以进行数值、字符串和文件3个方面的测试。符号意义-lt小于-ne不等于-eq等于-ge大于等于-gt大于-le小于等于test命令的示例如下:tests1=s2#判断字符串s1是否等于s2tests1!=s2#判断字符串s1是否不等于s2test-zs#判断字符串是否为空串test-n%str#判断字符串的长度是否大于0表1用于数值测试的选项表达式求值与注释表达式求值的示例如下:Shell程序中的注释不会被解释器执行。示例如下:expr1+3#表示表达式1+3expr2–1#表示表达式2-1expr1\*3#表示表达式1*3,其中“*”前要加转义字符“\”echo‘expr1+3’#表示输出表达式1+3的值#--------------------------------------------#这是一个注释#作者:#--------------------------------------------###多行注释```:<<EOF注释内容1...注释内容2...注释内容3...EOF```任务9.3:Shell的程序流程控制01程序流程控制概述Shell程序不仅可执行命令,还支持高级语言中的控制结构,包括顺序、分支和循环结构,用于复杂任务自动化。程序流程控制定义程序流程控制02顺序结构顺序结构按语句前后顺序依次执行,用户按解决问题顺序写出语句即可,简单直接。顺序结构特点顺序执行顺序结构示例【例9-3-1】顺序结构示例。#!/bin/bash#echo"Helloeveryone!"echo"Thisisshellprogramming!"a="A"echo"ais$a"b="Good"echo"bis$b"运行结果03分支结构分支结构依条件进入不同模块,需构造条件、分析流程选语句,适用于条件判断计算。分支结构特点单分支结构(if-then)单分支结构语法【例9-3-2】单分支结构示例。输入一个学生的年龄和成绩,当他的年龄大于18且成绩小于60时,输出“Youareanadult,butyouhavefailedyourexam!”。ifconditionthencommand1command2...commandNfi#!/bin/bash#echo"inputyourage:"readageecho"inputyourscore:"readscoreif(($age>18&&$score<60))then echo"Youareanadult,butyouhavefailedyourexam!"fi运行结果双分支结构(if—else)双分支结构语法【例9-3-3】从键盘上输入两个数,比较两个数的大小,并输出较大的数。ifconditionthencommand1command2...commandNelsecommandfi#!/bin/bashreadareadbif(($a>$b))then echo"Themaxnumberis:$a"else echo"Themaxnumberis:$b"fi运行结果分支结构的嵌套(if—elif—else)分支结构嵌套ifcondition1thencommand1elifcondition2thencommand2elsecommandNfi【例9-3-4】从键盘上输入两个数,若这两个数相等,则输出两个数相等的信息,若两第一个数大于第二个数则输出第1个数据大于第2个数,若第一个数小于第二个数则输出第一个数小于第二个数。#!/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运行结果多分支结构(case)多分支结构语法【例9-3-5】从键盘上输入1~7之间的任意一个数,实现:输入1,则输出今天是星期一;输入2,则输出今天是星期二;输入3,则输出今天是星期三;输入4,则输出今天是星期四;输入5,则输出今天是星期五;输入6,则输出今天是星期六;输入7,则输出今天是星期日;否则提示输入错误。case表达式in模式1)command1command2...commandN;;模式2)

command1command2...commandN;;esac#!/bin/bash#case$1in 1) echo"TodayisMonday" ;; 2) echo"TodayisTuesday" ;; 3) echo"TodayisWednesday" ;; 4) echo"TodayisThursday" ;; 5) echo"TodayisFriday" ;; 6) echo"TodayisStaturday" ;; 7) echo"TodayisSunday" ;; *) echo"InputError!" ;;esac运行结果04循环结构程序需重复执行的语句放循环体,设计条件,满足则执行,否则退出。循环结构特点for循环for循环语法【例9-3-6】当变量i<10时,从5开始输出变量i的值。forvarinitem1item2...itemNdocommand1command2...commandNdone#!/bin/bash#for((i=5;i<10;i++))do echo"Thenumberis$i"done运行结果while循环while循环语法whileconditiondocommanddone【例9-3-7】当循环变量的值小于20时,输出循环变量的值。#!/bin/bash#num=10while[$num-lt20]do echo"Thenumberis:$num" ((num++))done运行结果until循环until循环语法【例9-3-8】编写一个程序,输出变量的值(从10到6)。untilconditiondocommanddone#!/bin/bash#num=10until[$num-eq5]do echo"TheNumberis:$num" ((num--))done运行结果break指令用于直接跳出循环,可指定跳出层数,如`break2`跳出两层循环。break指令【例9-3-9】当内层循环的执行次数达到3次时,跳出内层循环。#!/bin/bashfor((i=1;i<=5;i++))do for((j=1;j<=5;j++)) do if((j==3));then break else echo“i=$i,j=$j” fi donedone运行结果break指令用于直接跳出循环,可指定跳出层数,如`break2`跳出两层循环。break指令【例9-3-10】当内层循环的执行次数达到3次时,就跳出两层循环(break2表示跳出两层循环,包括内层循环和外层循环)。#!/bin/bashfor((i=1;i<=5;i++))do for((j=1;j<=5;j++)) do if((j==3));then break2 else echo"i=$i,j=$j" fi donedone运行结果continue指令【例9-3-11】当循环变量等于16和17时,结束该轮次的循环。#!/bin/bash#for((i=10;i<20;i++))do if((i>15&&i<=17));then continue else echo"Thenumberis:$i" fidonecontinue指令用于结束本轮循环,跳过后续语句,直接进入下一次循环。运行结果任务9.4:Shell的应用01Shell应用概述Shell应用领域Shell程序可用于系统运维,如采集日志数据、监控系统状态,实现自动化管理,提高运维效率。系统运维1Shell可实现数据库定时备份,确保数据安全,还可进行定时操作和批处理操作,如凌晨数据同步、批量更改服务器密码。数据库操作2Shell可用于服务部署,如自动部署MySQL、Nginx等,简化部署流程,提升部署速度。服务部署302文件检查文件检查参数常见参数文件比较0102参数含义-dfile测试file是否为目录-ffile测试file是否为文件-efile测试file是否存在-rfile测试file是否可读-wfile测试file是否可写-xfile测试file是否可执行-sfile测试file是否存在且非空参数含义fiel1-ntfile2测试file1是否比file2新file1-otfile2测试file1是否比file2旧文件检查示例:检查目录#!/bin/bash#if[-d/usr/local/test];then echo"isdirectory"else echo"isnotdirectory"fi【例9-4-1】检查目录文件是否存在,并输出相应的结果。运行结果如下图文件检查示例:判断文件类型#!/bin/bash#FILE=$(ls/home/)foriin$FILEdo echo"fileis$i"if[-d/home/$i];then echo"$iisDIR" elif[-f/home/$i];then echo"$iisFILE" else echo"error" fidone【例9-4-2】检查某文件是目录文件还是普通文件,并输出相应的结果。运行结果如图03批量添加用户批量添加用户需求①用户文件准备需准备包含用户名的文件(如`users.txt`),每行一个用户名,用于批量添加用户。脚本功能脚本读取用户名文件,检查用户是否存在,不存在则创建用户并设置密码,实现自动化用户管理。【例9-4-3】编写Shell程序,实现批量添加用户的功能。user1user2user3user4user5批量添加用户示例②创建脚本脚本使用`while`循环读取用户名文件,通过`id`命令检查用户是否存在,不存在则用`useradd`创建用户,设置密码。③运行结果脚本运行后,输出用户创建结果,若用户已存在则提示,若不存在则创建并输出成功信息。#!/bin/bash#cat/home/openeuler/useradd/users.txt|whilereadUSERdoid$USER>/dev/null2>&1if[$?-eq0];then echo"theuser$USERisexist,pleasegivemeanothername"else useradd$USER echo"123456"|passwd--stdin$USER>/dev/null2>&1 echo"theuser$USERhasbeencreated"fidone项目9拓展阅读与思政

温馨提示

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

评论

0/150

提交评论