版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
2026/06/24LinuxShell编程汇报人:一剑目录Shell入门基础Shell程序创建与执行Shell变量Shell数组Shell运算符Shell条件判断语句Shell循环控制语句Shell函数项目实战应用010203040506070809Shell入门基础01Shell概述Shell是处于用户和操作系统之间的特殊程序,提供用户与操作系统进行交互的接口核心功能接收用户输入的命令,将命令送入操作系统执行解释功能传递命令时将命令解释为二进制形式,返回结果时将结果解释为字符形式命令解释器Shell拥有内建的命令集,是命令翻译工具操作系统、Shell、用户之间的关系用户通过Shell与操作系统交互,发起操作请求Shell作为中间层,接收用户命令并传递给操作系统操作系统调度硬件资源完成操作,将结果返回给用户Shell的分类BourneShellshLinux/UNIX最初使用的ShellShell编程方面优秀交互性不如其他ShellCShellcsh/tcsh语法类似C语言友好用户界面,支持作业控制命令行历史和别名,运行较慢KornShellksh结合csh交互式特性融合sh语法新增数学计算、进程协作、行内编辑Bourne-AgainShellbashsh的扩展,融合CShell和ksh方向键查阅、命令补齐、帮助功能Linux默认ShellZShellzsh包含84个内置命令完全兼容bash,性能提升需手动安装查看支持的Shell类型cat/etc/shells查看当前使用的Shellecho$SHELL切换Shell/bin/shShell的使用方式交互方式用户输入一条命令,按Enter后,Shell就解释执行一条命令逐行输入命令、逐行进行确认执行,用户输入的命令可以立即得到响应核心脚本方式按照Shell语言规范,编写程序并保存为文件在需要时执行Shell文件,一次性执行文件中的所有命令编程特点Shell是解释型的程序设计语言Shell脚本支持变量、数组和控制结构(选择结构、循环结构等)Shell编程语言简单易学,是最得力的工具使用Shell编程类似于使用DOS中的批处理文件Shell程序创建与执行02Shell程序基本语法开头必须以#!/bin/bash开始,放在文件第一行,告诉系统使用哪个程序执行该文件注释单行注释以#开头;多行注释格式为:<<!注释内容!执行命令可以输入多行命令以得到命令的结果信息1创建脚本使用vi编辑器创建脚本文件2设置权限设置可执行权限:chmodu+x脚本文件3执行程序执行Shell程序完整路径/root/date.sh直接使用绝对路径执行相对路径./date.sh当前目录下执行bash命令bash/root/date.sh显式指定解释器source命令source/root/date.sh或../date.sh在当前shell环境执行Shell变量03用户变量的定义与引用格式一变量名=变量值变量值必须是一个整体,中间没有特殊字符格式二变量名='变量值'单引号中的内容原样赋值格式三变量名="变量值"双引号里面有其他变量,会把变量的结果进行拼接后赋值变量引用格式$变量名基本引用"$变量名"双引号内引用${变量名}花括号精确引用"${变量名}"双引号+花括号特殊操作read-p"提示信息"变量名从标准输入读取变量值readonly变量名设置只读变量unset变量名删除变量变量名=`命令`或
变量名=$(命令)将命令执行结果赋值给变量环境变量环境变量定义环境变量用于初始化Shell的启动环境,存储路径列表,用于搜索可执行文件、库文件等。export环境变量名=环境变量值定义格式常用环境变量变量描述HOME用户主目录的完全路径名PATH用冒号分隔的目录路径名,Shell按此顺序搜索可执行文件SHELL当前使用的Shell类型USER当前登录用户的名字PWD当前工作目录的绝对路径名PS1主提示符,root用户默认为#,普通用户默认为$作用范围使用export定义的变量在当前Shell与子Shell中有效持久性Shell重启后环境变量将丢失查看命令查看所有环境变量:env命令位置变量与特殊变量位置变量语法规则命名规则:$n(n从1开始,$0表示脚本自身名称)$1~$9接收第1到第9个参数,直接使用数字即可访问echo$1$5${10}及以上必须使用花括号{}括起来才能正确解析echo${10}${12}$0特殊位置表示脚本自身的名称或路径,而非传入参数使用要点参数超过9个时务必加花括号,否则会被解析为$1后面跟字符0特殊变量变量描述$#传递到脚本的参数数量$*和$@传递到脚本的所有参数的内容$?命令执行后返回的状态,0表示没有错误,非0表示有错误$$当前进程的进程号$!后台运行的最后一个进程号重点注意$?是最常用的特殊变量,用于判断上一条命令是否执行成功,在脚本错误处理中至关重要Shell数组04数组的定义与引用整体赋值数组名=(值1值2...值n)每个值之间用空格隔开,一次性初始化整个数组单个元素赋值数组名[下标]=值通过指定下标位置,为单个数组元素赋值部分元素赋值数组名=([下标i]=值i[下标j]=值j...)指定多个下标位置,批量为特定元素赋值数组整体引用${数组名[@]}${数组名[*]}获取数组所有元素,用于遍历或整体操作数组元素引用${数组名[下标]}通过下标获取单个元素的值,下标从0开始获取数组长度${#数组名[@]}${#数组名[*]}获取数组元素个数,即数组长度获取元素长度${#数组名[下标]}获取指定下标位置元素的字符串长度Shell运算符05算术运算符let命令参数是单独的算术表达式let参数双括号let命令的替代表示形式((算术表达式))常用算术运算符运算符说明举例+加法echo$((a+b))-减法echo$((a-b))*乘法echo$((a*b))/除法(整除)echo$((a/b))%取余echo$((a%b))++/--自增/自减((a++))格式一test表达式格式二[表达式]注意:表达式两边要有空格字符串与关系运算符字符串运算符运算符说明=检测两个字符串是否相等!=检测两个字符串是否不相等-z检测字符串长度是否为0-n检测字符串长度是否不为0$检测字符串是否为空关系运算符只支持整数运算符说明-eq检测两个数是否相等-ne检测两个数是否不相等-gt检测左边的数是否大于右边的-lt检测左边的数是否小于右边的-ge检测左边的数是否大于等于右边的-le检测左边的数是否小于等于右边的布尔与逻辑运算符运算符说明布尔运算符!取反运算-a与运算,两个表达式都为真,则返回值为真-o或运算,有一个表达式为真,则返回值为真逻辑运算符&&逻辑AND||逻辑OR文件操作测试-e如果对象存在,则返回值为真-d如果对象存在且为目录,则返回值为真-f如果对象存在且为文件,则返回值为真-r如果对象存在且可读,则返回值为真-w如果对象存在且可写,则返回值为真-x如果对象存在且可执行,则返回值为真Shell条件判断语句06if条件语句if-then-fi语句if[表达式];then命令fi最基本的条件判断结构,表达式为真时执行命令if-then-else-fi语句if[表达式];then命令1else命令2fi双分支结构,根据条件真假执行不同命令if-then-elif-fi语句if[表达式];then命令1elif[表达式];then命令2else命令nfi多分支结构,支持多个条件判断应用场景成绩等级判断文件存在性检查用户登录状态判断case条件语句语法格式case变量in变量值1)若干命令行1;;变量值2)若干命令行2;;*)其它命令行;;esac执行流程Shell通过计算case后面变量的值,将其结果依次与变量值1、变量值2等进行匹配,直到找到一个匹配的运算式为止如果找到了匹配项,则执行它后面的若干命令行直到遇到一对分号(;;)为止匹配机制依次匹配:按顺序与每个变量值进行比较首次命中即执行:找到匹配后立即执行对应命令块应用场景菜单选择操作系统类型判断多分支条件处理Shell循环控制语句07for循环语句语法格式for变量名[in数值列表]do若干个命令行done循环列表形式枚举列表:forvarin12345变量列表:forvarin$i命令替换:forVARin$(seq1100)位置参数:forvar(省略in)C语言格式:for((i=1;i<=10;i++))语法详解for循环是Shell脚本中最常用的循环结构,支持多种列表形式遍历数据集合。通过in关键字指定取值范围,循环体以do开始、done结束。变量依次取列表中的每个值,执行循环体内的命令序列。列表为空时循环不执行,支持break/continue控制流程。应用示例计算1到100的整数和计算1到100的奇数和遍历目录文件九九乘法口诀表while与until循环语句while循环语句while表达式do若干个命令行done若满足表达式,则执行do和done之间的若干个命令行,否则跳出while循环。条件为真时执行whilevsuntilwhile循环until循环条件条件为真时继续执行条件条件为假时继续执行执行时机表达式为真即执行执行时机表达式为假即执行核心区别•while循环在条件为真时继续执行循环•until循环在条件为假时继续执行循环,当条件为真时跳出循环until循环语句until表达式do若干个命令行done若不满足表达式,则执行do和done之间的若干个命令行,否则跳出until循环。条件为假时执行Shell函数08函数的定义与调用函数在调用之前必须先定义函数可以接收参数,使用$1、$2等位置变量函数可以有返回值,使用return语句函数返回值通过$?获取函数定义语法[function]函数名(){函数体}function可省略,函数体由一个或多个命令组成函数调用语法函数名
可选的参数列表无参数无返回值最简单的函数形式有参数无返回值接收外部输入处理有参数有返回值完整函数功能实现文件存在性检查实用工具函数示例阶乘计算函数fact(){n=$1;[$n-le1]&&return1fact$((n-1));return$((n*$?))}调用示例fact5;echo"5!=$?"项目实战应用09项目一:主机状态监测项目要求:主机状态监测编写Shell脚本hoststatus.sh,实现监测某个主机是否启动成功。通过三次ping命令,每次发送一个数据包,如果三次均失败则显示主机未启动,否则显示主机启动成功。实现思路三次ping探测使用for循环执行3次ping,每次发送1个数据包,间隔1秒循环计数存储通过export导出变量ping_count1/2/3,成功记为1,失败记为0条件判断输出三次结果逻辑或运算,任一次成功则输出"up",全部失败输出"down"核心代码#!/bin/bashfor((i=1;i<=3;i++))doifping-c1$1&>/dev/nullthenexportping_count"$i"=1elseexportping_count"$i"=0fisleep1doneif[$ping_count1-eq1]||[$ping_count2-eq1]||[$ping_count3-eq1]thenecho"$1isup"elseecho"$1isdown"fi执行示例命令格式bashhoststatus.sh2参数说明$1—目标主机IP地址或域名输出结果✓主机可达—2isup✗主机不可达—2isdown项目二:批量用户管理项目要求新建Shell脚本useradd.sh,使用循环,实现批量添加用户和密码,所有要添加的用户名和密码被保存在/root/userlist.txt文件中userlist.txt格式示例u001p001u002p002u003p003实现思路读取文件:使用whilereadLINE逐行读取userlist.txt切割字段:用cut命令提取用户名和密码字段循环处理:判断用户是否存在,设置密码核心代码whilereadLINEdoUsername=`echo$LINE|cut-f1-d''`Password=`echo$LINE|cut-f2-d''`$Useradd$Username&>/dev/nullif[$?-ne0]thenecho"$Username已经存在,跳过密码设置"elseecho"$Username:$Password"|chpasswdecho"$Username$Passwordcreatessuccessfully!"fidone<$Userfile#!/bin/bashUserfile=/root/userlist.txtUseradd=/usr/sbin/useraddCut=/usr/bin/cut执行流程准备文件:创建/root/userlist.txt,写入用户名密码对执行脚本:运行bashuseradd.sh启动批量处理用户创建:脚本自动调用useradd添加系统用户密码设置:通过chpasswd命令批量设置初始密码项目三:Nginx自动安装项目要求新建Shell脚本nginx_install.sh,创建四个函数依次调用,实现在/usr/local/nginx下安装Nginx的功能。需要CentOS
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026年婺源县网格员招聘笔试参考题库及答案解析
- 2026年营山县网格员招聘考试模拟试题及答案解析
- 2026年交城县网格员招聘考试备考题库及答案解析
- 2026年习水县网格员招聘考试备考题库及答案解析
- 2026年获嘉县网格员招聘考试参考题库及答案解析
- 2026年丹凤县网格员招聘笔试备考题库及答案解析
- 2026年泰来县网格员招聘考试备考题库及答案解析
- 2026年古县中小学幼儿园教师招聘笔试备考试题及答案解析
- 2026年湖北省黄冈市八年级道德与法治下册期末考试试卷及答案
- 浙江公务员(行测)真题试卷(含答案)
- 2026年上海市闵行区中小学教师招聘考试试卷及答案
- 2026 年秋季开学:新时代教师师德师风建设专题培训
- 新版2026西师大版数学六年级上册全册完整版教案教学设计合集
- 2026年山西调度规程考试试题及答案
- 蓝图绘就 十五五(2026-2030)山东省纺织服装产业升级建设方案报告
- 2026年幼儿园新生家长会后勤园长
- 2025年新疆医科大学第一附属医院医护人员招聘考试题库及答案详解
- 工程伦理第2版
- 人民医院病房改造提升项目监理大纲服务方案投标文件(技术标)
- ICU患者镇静镇痛状态评估量表
- 社区胸痛健康教育
评论
0/150
提交评论