前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Shell笔记4:shell编程,字符串处理与正则表达式

Shell笔记4:shell编程,字符串处理与正则表达式

作者头像
陪你听风
发布2021-03-31 23:32:33
6200
发布2021-03-31 23:32:33
举报
文章被收录于专栏:陪你听风陪你听风

1.字符串处理 a.子串截取 方法1:${var:起始位置:长度},编号从0开始,可省略 方法2:expr substr expr substr "$var" 起始位置 长度 编号从1开始 方法3:使用cut工具 echo $var |cut -b 起始位置-结束位置 编号从1开始

示例:NM=“I am fanxiaomo” echo ${NM,0,1} expr substr "$NM" 1 4 echo $NM |cut -b 1-4 b.路径分割 取目录位置 格式:dirname "字符串" 取文档的基本名称 格式:basename “字符串” c.子串替换 格式${var/old/new} 替换第一个结果 格式${var//old/new} 替换所有 d:字符串掐头 从左向右,最短匹配删除 格式:${变量名#*关键词} 从左向右,最长匹配删除 格式:${变量名##*关键词} #用来删除头部,*通配 MDIR=“/var/spool/mail/root” echo ${MDIR#*/} == var/spool/mail/root echo ${MDIR##*/} ==root e:字符串去尾 从右向左,最短匹配删除 格式:${变量名%关键词*} 从右向左,最长匹配删除 格式:${变量名%%关键词*} %用来删除尾部,*通配 MDIR=“/var/spool/mail/root” echo ${MDIR%o*} == /var/spool/mail/ro echo ${MDIR%%o*} ==/var/sp 例子:批量改名.doc为.txt #!/bin/bash for FILE in *.doc do mv $FILE ${FILE%.doc}.txt done

#!/bin/bash for FILE in *.$1 do mv $FILE ${FILE%.$1}.$2 done

2.变量的初始值处理 a.初始值的检测与设置 取值,${var:-word} 变量var已存在且非null,则返回$var的值 否则返回字符串word,变量var值不变

赋值:${var:=word} 若变量var已存在且非null,则返回$var的值 否则返回字符串word,且赋值给变量var

例:输入一个正整数,求和1-x

#!/bin/bash read -p "请输入一个正整数:" x x=${x:=1};i=1;SUM=0 while [ $i -le $x ] do let SUM+=i;let i++ done echo "$SUM"

3.脚本的扩展技巧 a.shell数组

关于变量的类型,shell中变量的值默认均视为文本 在数学运算中自动转为整数 var1=123 var2=$var1+20 echo $var2 123+20 expr $var1 + 20

强制声明变量类型:declare 选项 变量名 -i:整数 -a:数组 -x:设置为全局变量 -r:设置为只读

定义赋值数组 整体赋值:数组名=(值1,值2,值n) 为单个元素赋值 数组名[下标]=值

获取单个数组元素:${数组[下标]} 获取所有数组元素:${数组[@]} 获取数组元素个数:${#数组[@]} 获取连续的多个数组元素:${数组名[@]:起始下标:元素个数} 获取某个数组元素的长度:${#数组名[下标]} 截取数组元素值的一部分:${#数组名[下标]:起始下标:字符数}

getip.sh 1反复从键盘输入IP地址,保存到数字 2当用户输入EOF后结束输入,显示数组IPADDS个元素的值 3报告本次录入的IP地址个数,其中第一个录入的地址 [root@kvm shdir]# cat getip.sh #!/bin/bash IP="" i=0 while read -p "请添加IP地址,输入EOF结束:" IP && [ "$IP" != "EOF" ] do IPADDS[$i]="$IP" let i++ done echo "您已录入的IP地址如下:" echo ${IPADDS[@]} echo "总共${#IPADDS[@]}个地址" echo "第一个IP地址是${IPADDS[0]}"

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2018年8月22日,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档