#Linux Shell 编程入门 Day03:中断控制、case、函数定义与调用、字符串处理
一、中断控制关键字Shell中用于控制循环与脚本执行流程的三个核心关键字break、continue、exit作用与用法各不相同。1.1 关键字作用说明break跳出当前循环体继续执行循环以外的语句continue跳出当前循环直接进入下一次循环exit直接退出整个脚本后续代码不再执行夹在 do 和 done 之间的所有代码统称循环体1.2 break关键字演示作用退出整个循环体执行循环外代码#!/bin/bash#此脚本用于验证break关键字的作用foriin{1..5}#{1..5}就是1-5的整数doif[$i-eq3];thenbreak#退出整个循环体继续执行循环体以外的语句fiecho$idoneechohaha执行结果1 2 haha1.3 continue关键字演示作用跳过本次循环进入下一次循环#!/bin/bash#此脚本用于验证continue关键字的作用foriin{1..5}doif[$i-eq3];thencontinue#跳出当前循环进入下一次循环fiecho$idoneechohaha执行结果1 2 4 5 haha1.4 exit关键字演示作用直接终止整个脚本运行#!/bin/bash#此脚本用于验证exit关键字的作用foriin{1..5}doif[$i-eq3];thenexit#退出整个脚本fiecho$idoneechohaha执行结果1 21.5 中断控制综合案例计算1-100之间偶数之和验证break与continue#!/bin/bash#此脚本用于计算1-100的中的偶数之和i1sum0while:doif[$i-gt100];thenbreak#退出循环继续执行循环体以外的语句elif[$[i %2]0];thensum$[sum i]letielseleticontinue#退出当前循环进入下一次循环fidoneecho1-100的偶数之和为:$sum执行结果1-100的偶数之和为: 2550二、case语句检查变量的实际取值如果与预设的值相匹配则执行对应的操作依旧遵循匹配即停止与if相比case专门适合固定值匹配、精准等值多选case语句用于变量值匹配匹配成功则执行对应命令替代多分支if判断结构更清晰。2.1 case语句标准结构case变量值in模式1)命令序列1.1 命令序列1.2;;#每一个分支的最后一个语句加;;即可模式2)命令序列2;;... *)默认命令序列;;esac2.2 案例1判断用户输入输入redhat输出rocky输入rocky输出redhat#!/bin/bashcase$1in#$1为位置变量执行脚本时传参redhat)echorocky;;rocky)echoredhat;;*)echo用法脚本 redhat|rocky;;esac执行命令./case_v1.sh redhat执行结果rocky2.3 案例2系统信息检测菜单#!/bin/bashecho输入1查看主机名 输入2查看IP地址 输入3查看网关 输入4查看磁盘 输入5查看内存信息read-p请输入您要查看的内容编号: numcase$numin1)hostname;;2)ifconfig|head-2;;3)route -n;;4)lsblk;;5)free-h;;*)echo输入有误请重新输入;;esac三、Shell函数函数又叫做方法功能它是可重复调用的代码块是一堆代码的集合。可以用来简化复杂代码、提升复用性。3.1 函数作用将复杂重复使用的代码块简单化使脚本代码更加简洁增强易读性提高Shell脚本的执行效率一次定义多次调用3.2 函数定义与调用定义方式1function函数名{命令序列...}定义方式2常用函数名(){命令序列...}调用方式调用已定义的函数格式函数名注意函数需要先定义了才能调用函数传值格式函数名 值1 值2 …传递的值作为函数的位置参数调用函数时传递的具体参数值叫做实参3.3 案例1mkcd函数创建并进入目录新建函数mkcd用来创建一个目录并且切换至此目录#创建函数mkcd(){mkdir$1cd$1}#调用函数mkcd /opt/mydir1#验证pwd执行结果/opt/mydir13.4 案例2加法器函数创建一个对两个整数求和的加法器命令行也是Shell环境可以直接创建#定义函数functionadder{echo$[$1$2]}#调用并传参adder89执行结果173.5 echo命令补充echo命令为Linux中最常用的输出命令-n不换行输出-e使用扩展功能常用于为关键字增加颜色显示echo -e \033[31m目标字符串\033[0m“31m到37m为字体颜色41m到46m为背景颜色解读\033[31m目标字符串 给目标字符串染色也会把后续提示符染色\033[0m将提示符改回黑色。echo颜色语法echo-e\033[色号m目标字符串\033[0m#31-37字体颜色41-46背景颜色示例echo-e\033[31mLinux\033[0m#红色echo-e\033[32mLinux\033[0m#绿色echo-e\033[33mLinux\033[0m#黄色cecho函数简化颜色输出创建cecho函数使用函数简化echo颜色输出functioncecho{echo-e\033[$1$2\033[0m}#调用cecho 31m abc#红色abccecho 32m abc#绿色abc四、字符串处理Shell内置字符串操作无需外部工具高效处理截取、替换、掐头、去尾、默认值。4.1 字符串截取使用${}表达式格式${变量:起始位置:长度}下标编号从0开始起始0可省略如果截取编号从0开始可省略若长度不写则会输出剩余所有字符字符串截取示例截取变量subject的前6个字符subjectcloudcomputingecho${subject:0:5}#从0开始截5位 → cloudecho${subject::5}#省略0效果同上 → cloud4.2 字符串替换只替换第一个匹配的结果格式${变量/old/new}替换全部匹配结果格式${变量//old/new}subjectcloudcomputingecho${subject/c/##}#替换第一个c → ##loudcomputingecho${subject//c/##}#替换所有c → ##loud##omputing案例手机号加密脚本#!/bin/bash#此脚本用于加工加密手机号read-p请输入您的手机号: phonetmp${phone:3:4}#截取中间4位echo${phone/$tmp/****}#替换为****执行结果186****17654.3 字符串掐头从左删用的较少从左向右最短匹配删除*为通配符格式${变量#*关键字}从左向右最长匹配删除*为通配符格式${变量##*关键字}subjectcloudcomputingecho${subject#*o}#字符串掐头掐掉最短o左边的所有内容*为通配符 → udcomputingecho${subject##*o}#字符串掐头掐掉最长o左边的所有内容*为通配符 → mputing为什么要加通配符不加 * 就是只匹配开头固定字符varabc123abcecho${var#abc}# 从开头精确删掉 abc输出为123abc这样的话只删变量最开头和关键字一模一样的内容中间有别的字符就匹配不到。4.4 字符串去尾从右删用得较多从右向左最短匹配删除*为通配符格式${变量%关键字*}从右向左最长匹配删除*为通配符格式${变量%%关键字*}abchelloworldecho${abc%o*}#字符串去尾去掉最短o右边的所有内容*为通配符 → hellowecho${abc%%o*}#字符传去尾去掉最长o右边的所有内容*为通配符 → hell此处的通配符规则与之前一致倘若不加*那么只能精准匹配结尾因为这个公式就是从末尾开始的字符案例批量修改文件扩展名#!/bin/bash#用法脚本 原扩展名 新扩展名forfilein$(ls*.$1)domv$file${file%.$1}.$2done执行命令./rename.sh doc txt4.5 变量初始值赋值格式${变量:-默认值}若变量存在且非空则返回变量的值否则返回-后边的默认值变量值不变namezhangsanecho${name:-tom}#输出zhangsanunsetnameecho${name:-tom}#输出tomecho$name#变量仍为空案例创建用户带默认密码#!/bin/bashread-p请输入用户名: nameread-p请输入密码【默认123456】: passif[!-z$name];thenuseradd$nameecho${pass:-123456}|passwd--stdin$name#如果pass1有值那么优先用pass的变量值。如果pass为空那么默认密码123456fi五、Day03知识总结中断控制break退出循环、continue跳过本次、exit退出脚本case语句多分支匹配结构清晰适合固定值判断函数代码复用支持传参简化脚本字符串处理截取、替换、掐头、去尾、默认值赋值高效处理文本