当前位置: 首页 > ds >正文

case和字符串操作

使用if选择结构

if [];then

elif [];then #注意这个地方,java是else if

else ;

fi

使用for循环结构

使用for循环,语法结构如下所示:
for 变量名 in 值1 值2 值3    #值的数量决定循环任务的次数
do命令序列
done
#循环输出1到10
for i in {1..10}     #注意的是花括号里面不加空格
doecho $i;
done
#从文件中获取数据,进行批量的ping,或者用户创建
# 创建存储信息的文件,也是数据来源
vim /sh/ip.txt
192.168.88.2
192.168.88.254
192.168.88.3
192.168.88.240
#使用$(cat 路径)获取数据
for i in $( cat /sh/ip.txt )
doping -c 1 $i &> /dev/null;if [ $? == 1  ];thenecho $i"可以ping通";else    echo $i"bu可以ping通";fi
done

使用while循环结构

写法特点适用场景
while :简洁,无限循环,需手动退出。简单守护进程、持续监控
while true功能相同,但语义更明确(推荐)。while :
while [条件]条件满足时循环,可自动终止。需要动态终止条件的场景
使用while循环,语法结构如下所示:
while 条件测试    #根据条件的结果决定是否要执行任务,条件测试成功的话就执行,如果失败立刻结束循环
do命令序列
done
num=$[RANDOM%10+1] 是一种生成 1 到 10 之间的随机整数 的方法。
num=$[RANDOM%12+1]
q=1
while [ $q -eq 1 ];
doread -p "shuru[1-12]:" nub;if [ $nub -gt $num ];thenecho "pianda";elif  [ $num -gt $nub  ];thenecho "pianxiao";else  echo "daduil";q=0;fi
done

注意:使用[]一定要记得使用空格

中断及退出

关键字作用范围功能描述典型场景示例代码
break循环结构(for/while/until立即退出当前循环,后续迭代不再执行。提前终止循环(如找到目标后退出)。bash<br>for i in {1..5}; do<br> [ "$i" -eq 3 ] && break<br> echo "$i"<br>done<br># 输出: 1 2<br>
continue循环结构(for/while/until跳过当前迭代,直接进入下一次循环。跳过特定条件下的处理(如忽略无效输入)。bash<br>for i in {1..5}; do<br> [ "$i" -eq 3 ] && continue<br> echo "$i"<br>done<br># 输出: 1 2 4 5<br>
exit整个脚本或函数立即终止脚本或函数,并返回退出状态码(默认 0,非零表示错误)。发生致命错误时终止脚本,或从函数返回状态码。bash<br>if [ ! -f "file.txt" ]; then<br> echo "文件不存在"<br> exit 1<br>fi<br># 若文件不存在,脚本终止并返回状态码 1<br>
# 编写持续创建用户脚本sum.sh
q=0;
while :
doread -p "请输入用户名,输入0退出:" usern;  if [ $usern == 0 ];thenbreak;                            #break跳出循环,exit结束正在执行的进程elif  useradd "$usern";then     q=$(($q+1)); continue;else break;fidone
echo $q;
工具语法格式四则运算示例求模运算示例适用场景POSIX 兼容性推荐度
$(( ))$((表达式))echo $((a + b)) echo $((a * b))echo $((a % b))通用算术运算(推荐),支持所有标准运算符(+, -, *, /, % 等)。✅ 完全兼容⭐⭐⭐⭐⭐
$[ ]$[表达式]echo $[a + b] echo $[a * b]echo $[a % b]旧版 Bash 语法(已过时),功能与 $(( )) 相同,但非 POSIX 标准。❌ 不兼容(部分 Shell 不支持)❌ 不推荐
letlet "表达式"let "result=a+b" let "result=a*b"let "result=a%b"变量赋值或复杂运算(如 i++),但无法直接输出结果,需结合 echo 或变量。✅ 完全兼容⭐⭐⭐

基于case分支编写脚本

case分支属于匹配执行的方式,它针对指定的变量预先设置一个可能的取值,判断该变量的实际取值是否与预设的某一个值相匹配,如果匹配上了,就执行相应的一组操作,如果没有任何值能够匹配,就执行预先设置的默认操作。case分支的语法结构如下所示:
case 变量 in
模式1)命令序列1 ;;
模式2)命令序列2 ;;.. ..
*)默认命令序列
esac
case $1 in
-f)touch $2;;
-d)mkdir $2;;
-r)remove -f $2;;
*)echo "-d,-f,-r";
esac

使用Shell函数

在Shell脚本中,将一些需重复使用的操作,定义为公共的语句块,即可称为函数。通过使用函数,可以使脚本代码更加简洁,增强易读性,提高Shell脚本的执行效率
1)函数的定义方法
格式1:
function 函数名 {命令序列.. ..
}格式2:
函数名() {命令序列.. ..
}2)函数的调用直接使用“函数名”的形式调用,如果该函数能够处理位置参数,则可以使用“函数名 参数1 参数2 .. ..”的形式调用。注意:函数的定义语句必须出现在调用之前,否则无法执行。3) 测试语法格式[root@sv7 ~]# a() {            #定义函数echo abcecho xyz}[root@sv7 ~]# a             #调用函数

字符串处理

字符串截取的用法: ${变量名:起始位置:长度}
起始位置从0开始计数
[root@nsd ~]# echo ${phone:0:3} 
121字符串替换的两种用法:
1、只替换第一个匹配结果:${变量名/old/new}
2、替换全部匹配结果:${变量名//old/new}[root@nsd ~]# echo ${phone/2/*} 
1*12121212121
[root@nsd ~]# echo ${phone//2/*} 
1*1*1*1*1*1*1
[root@nsd ~]# echo $phone         ==注:替换数据不会改变原始数据的值==
1212121212121   字符串掐头去尾:
1、从左向右,最短匹配删除:${变量名#*关键词}
2、从左向右,最长匹配删除:${变量名##*关键词}
3、从右向左,最短匹配删除:${变量名%关键词*}
3、从右向左,最长匹配删除:${变量名%%关键词*}
[root@nsd ~]# echo ${n##* }
/mnt/dvd
[root@nsd ~]# lsblk
NAME        MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
sr0          11:0    1 10.5G  0 rom  /mnt/dvd

字符串初值的处理

可以通过${var:-初值}判断变量是否存在,决定变量的初始值。
# 编写一个脚本可以创建用户,密码可以自定义也可以使用默认值123456
read -p "user:" usert
useradd $usert
read -p "password:" pas
echo ${pas:-123} | passwd --stdin  $usert

cut

示例:截取以空格分隔的字符串的第二部分

echo “hello world linux” | cut -d’ ’ -f2

输出:world

-d' ':指定分隔符为空格(可替换为其他字符如 -d':')。   
-f2:截取第二个字段。  1开始
http://www.xdnf.cn/news/2775.html

相关文章:

  • 网络原理 - 10(HTTP/HTTPS - 1)
  • UniApp 实现分享功能
  • 深入探究C++ 中的stack、queue和deque
  • 图论---拓扑排序(DFS)
  • delphi使用sqlite3
  • 《AI大模型应知应会100篇》第39篇:多模态大模型应用:文本、图像和音频的协同处理
  • 基于 Python 的实现:居民用电量数据分析与可视化
  • C++入门(namespace/输入输出)
  • 2025A卷-正整数到Excel编号之间的转换
  • 对Electron打包的exe文件进行反解析
  • 在idea开发中遇到的20个bug
  • 晶振PCB设计核心要点与规范
  • 设备指纹护航电商和金融反欺诈体系建设
  • 飞凌嵌入式T527核心板获得【OpenHarmony生态产品兼容性证书】
  • STL标准模板库
  • 杰理-ios获取不了时间问题
  • 爬虫过程中如何确保数据准确性
  • Qt/C++面试【速通笔记四】—Qt中的MVC模式
  • VLM-E2E:通过多模态驾驶员注意融合增强端到端自动驾驶——论文阅读
  • RecoNIC 入门:SmartNIC 上支持 RDMA 的计算卸载-FPGA-智能网卡-AMD-Xilinx
  • 【Vue.js】组件数据通信——基于Props 实现父组件--> 子组件传递数据(最基础案例)
  • uniapp自定义头部(兼容微信小程序(胶囊和状态栏),兼容h5)
  • 数据展示功能界面设计与实现及终端控制界面思路(17)
  • 使用OpenCV和dlib库进行人脸关键点定位
  • 2025系统架构师---管道/过滤器架构风格
  • 待验证---Oracle 19c 在 CentOS 7 上的快速安装部署指南
  • Java生成微信小程序码及小程序短链接
  • TensorFlow深度学习框架:从入门到精通的完整指南
  • 基于Java,SSH,Vue电子商品交易二手平台仿闲鱼转转验机系统设计
  • Eureka 深度解析:从原理到部署的全场景实践