shell脚本的一些常用操作
字符串长度:
${#string}可获取string字符串的长度,如下:
jenkins@soft1pc:~$ str="who are you"
jenkins@soft1pc:~$ echo ${#str}
11
${string:position:length}表示在字符串string中截取从position开始长度为length的字符串,shell脚本字符串的起始位置与python一致也是从0开始算的
jenkins@soft1pc:~$ str="who are you"
jenkins@soft1pc:~$ echo {str:2:5}
{str:2:5}
jenkins@soft1pc:~$ echo ${str:2:5}
o are
字符串截取(不匹配字符)
符号 含义解析
${string#substring} 从变量${string}的开头, 删除最短匹配${substring}的子串
${string##substring} 从变量${string}的开头, 删除最长匹配${substring}的子串
${string%substring} 从变量${string}的结尾, 删除最短匹配${substring}的子串
${string%%substring} 从变量${string}的结尾, 删除最长匹配${substring}的子串
我们可以总结一下规律:
换句话来说,#总是表示左边算起,%总是表示右边算起;一个符号表示最短匹配,两个符号表示最长匹配。
jenkins@soft1pc:~$ str="who are you"
jenkins@soft1pc:~$ echo ${str#"who"}
are you
jenkins@soft1pc:~$ echo ${#str%"you"}
-bash: ${#str%"you"}: bad substitution
jenkins@soft1pc:~$ echo ${str%"you"}
who are
我们可以利用该特点做一些有意义的事情,下面举几个例子:
# 定义字符串
f=$(realpath 空间数据处理环境搭建.pdf)
# 输出该字符串变量的值,结果为/Users/tanzhenyu/Resources/Books/Python空间数据处理实战/空间数据处理环境搭建.pdf
echo $f
# 第一件事情:提取文件名称,输出结果为:空间数据处理环境搭建.pdf
echo ${f##*/}
# 第二件事情:提取文件扩展名,输出结果为:pdf
echo ${f##*.}
# 第三件事情:提取父目录,输出结果为:/Users/tanzhenyu/Resources/Books/Python空间数据处理实战
echo ${f%/*}
1
2
3
4
5
6
7
8
9
10
当然,Shell编程中我们也可以使用basename和dirname两个命令分别提取文件名和父目录名称:
# basename提取当前文件或者当前目录名称,输出结果为:空间数据处理环境搭建.pdf
echo $(basename $f)
# dirname提取父目录名称,输出结果为:/Users/tanzhenyu/Resources/Books/Python空间数据处理实战
echo $(dirname $f)
1
2
3
4
子串替换
符号 含义解析
${string/substring/replacement} 使用${replacement}, 来代替第一个匹配的$substring
${string//substring/replacement} 使用${replacement}, 代替所有匹配的$substring
${string/#substring/replacement} 如果${string}的前缀匹配${substring}, 那么就用${replacement}来代替匹配到的${substring}
${string/%substring/replacement} 如果${string}的后缀匹配${substring}, 那么就用${replacement}来代替匹配到的${substring}
注:${substring}可以是一个正则表达式.
例子:
# 把Windows的路径换成类UNIX的路径
f='C:\Windows\system32\cmd.exe'
echo ${$f//\///}
# 输出结果为:C:/Windows/system32/cmd.exe
shell脚本的一些常用操作的更多相关文章
- shell脚本介绍以及常用命令
Shell脚本 Shell Script,Shell脚本与Windows/Dos下的批处理相似,也就是用各类命令预先放入到一个文件中,方便一次性执行的一个程序文件,主要是方便管理员进行设置或者管理用的 ...
- Shell脚本文件中常用的操作语句
1. 清空文件中的内容 cat /dev/null >> /var/log/messages 2. 脚本中判断用户是不是root用户 ROOT_UID = 0 # ...
- Python脚本控制的WebDriver 常用操作 <一> 启动浏览器
由于本人的学习定位是基于Selenium+WebDriver+Python+FireFox+Eclipse+Pydev, 所以我的笔记也只和这方面相关. 我打算先学习基于Python脚本WebDriv ...
- 让你提前知道软件开发(22):shell脚本文件操作
文章1部分 再了解C语言 shell脚本中的文件操作 [文章摘要] 编写shell脚本时,经常会涉及到对文件的操作,比方从文件里读取一行数据.向文件追加一行数据等. 完毕文件读写操作的方法有非常多,了 ...
- shell脚本57问
[1]交互方式.非交互方式.Shell脚本是什么? 经常与linux打交道,肯定对shell这个词不陌生.不明白shell意思的,可以自行翻译:外壳.去壳. 这个翻译结果怎么可以与计算机系统联系起来呢 ...
- shell脚本编写规范和相关变量类型
shell编程规范与变量 一.shell脚本概述 ① 什么是shell? Linux中有哪些shell? ② shell的作用 ③ 用户的登录shell ④ shell脚本 ...
- [ Shell ] 通过 Shell 脚本导出 CDL 网表
https://www.cnblogs.com/yeungchie/ 通过 si 导出电路网表,实际上在 Virtuoso 中通过 export - cdl 和 Calibre LVS 的步骤中也是通 ...
- shell 脚本之获取命令输出字符串以及函数参数传递
在ubuntu 14.04之后,所有的U盘挂载也分用户之分,最近很多操作也和U盘有关,所以就研究了一上午shell脚本函数以及字符串操作的方法. 字符串操作: 获取他的命令输出比较简单,打个简单的比方 ...
- java 调用bash shell脚本阻塞的小问题的解决
java 调用bash shell脚本阻塞的小问题的解决 背景 使用java实现的web端,web端相应用户的界面操作,使用java调用bash实现的shell脚本进行实际的操作,操作完成返回执行结 ...
随机推荐
- base64编解码
//ZBBase64.h #include <string> class ZBase64{public: /* 编码 DataByte [in]输入的数据长度,以字 ...
- 记录C#中的扩展方法
C#中的扩展方法. 系统自带的类型,我们无法去修改: 修改源代码需要较大的精力,而且可能会带来错误: 我们只是需要一个或者较少的几个方法,修改源代码费时费力: 被扩展的类是sealed的,不能被继承: ...
- php 5.6,7.0静态方法调用和new调用方法性能差距
windows7 64 机器I5 8G内存,128G SSD 吐槽一下,win10内存的消耗,真的可怕 测试代码 class staticTest { public function test() { ...
- docsis cm 上线过程(bigwhite)
扫描与同步下行(SYNC消息) 获取上行参数(UCD消息.MAP消息) 通过测距完成时间偏移等的调整(RNG消息) 设备类型鉴定(可选,DCI消息) 建立IP通道(DHCP) 同步系统时间(TOD ...
- 出现errSecInternalComponent
出现errSecInternalComponent Xcode签名机制(code signing mechanism) 的 bug, Xcode 中账号多了,就会产生很多过期的描述文件,Xcode 没 ...
- 查看历史会话等待事件对应的session信息
此处以enq: TX - row lock contention等待时间为例. 查看snap_id对应时间 select to_char(s.startup_time,'dd Mon "at ...
- NodeJS笔记(四) NPM 指令--- npm start
在上一节中使用我们使用下面的指令启动了Express的demo APP项目 npm start 这个指令具体执行了哪些内容呢? Node.js新版本改变了启动方式,npm start 会执行 bi ...
- NoSQL入门
NoSQL(Not Only SQL)入门: *没有Fixed Schema *没有关系型数据储存在系统中 * 在大数据方面NoSQL有更好的表现 * 支持unstructured data - 不同 ...
- [ionic3.x开发记录]参考ionic的float-label动效,写一个项目内通用的input组件,易扩展
上图: module: import {NgModule} from "@angular/core"; import {CommonModule} from "@angu ...
- redis集群及相关的使用
从redis 3.0之后版本支持redis-cluster集群,Redis-Cluster采用无中心结构,每个节点保存数据和整个集群状态,每个节点都和其他所有节点连接. 1.所有的redis节点彼此互 ...