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脚本进行实际的操作,操作完成返回执行结 ...
随机推荐
- flask之一些凌乱知识点
本篇导航: session组件 上下文与内置函数 pymysql问题 模版问题 一.session组件 1.session组件简介 flask-session是flask框架的session组件,由于 ...
- jQuery (01) 浏览器的事件模型
浏览器的事件模型 由网景公司引入的 DOM0 级事件模型 把事件处理程序绑定到 DOM 元素的属性上: ele.onclick(); ele.onDOMContentLoad(); ele.onloa ...
- jquery各版本
各版本下载: https://www.jb51.net/zt/jquerydown.htm
- DEV中右键菜单如何只在非空单元格上显示?
问题: 1. 开发时,我的winform程序中有很多gridview,我希望右键菜单只在我点击非空的行时才显示,点击其他空白区域时不显示: 2. 有一个树状导航图,treelist 中的节点都有右键菜 ...
- 嵌入式linux内存越界定位和解决 (转)
https://blog.csdn.net/meejoy/article/details/41729585 https://blog.csdn.net/killmice/article/details ...
- c++函数strapy
头文件:#include <string.h> 定义函数:char *strcpy(char *dest, const char *src); 函数说明:strcpy()会将参数src 字 ...
- 一对一关联模型,HAS_ONE
class UserModel extends RelationModel{ protected $_link = array( 'Profile'=> HAS_ONE, //就这一行就行了 ) ...
- jeecg中excel导出字段判空处理
我们清楚,jeecg 导出 excel 采用的是 easypoi,不知道是否遇到过这种情况: 我们以一个实体属性为例: @Excel(name="问题分类",dicCode=&qu ...
- 基于binlog恢复工具mysqlbinlog_flashback
基于binlog恢复工具mysqlbinlog_flashback简介 mysqlbinlog_back.py 是在线读取row格式的mysqld的binlog,然后生成反向的sql语句的工具.一般用 ...
- #学号 20175201张驰 《Java程序设计》第3周学习总结
学号 20175201张驰 <Java程序设计>第3周学习总结 教材学习内容总结 第四章 每个源文件里可以包含多个类,但只能有1个主类:类中可以包含变量和方法 变量有两种:实例变量和类变量 ...