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脚本进行实际的操作,操作完成返回执行结 ...
随机推荐
- selenium3 TestNG 介绍与配置
一.TestNG介绍 我之前有学习过Junit,Nunit 这些工具,现在想看看TestNG,那么TestNG是什么呢?他们之间有什么区别呢? TestNG(Next Generation)是一个测试 ...
- node 学习(一)
什么是 Node.js Node.js就是运行在服务端的JavaScript. Node.js是一个基于Chrome JavaScript运行时建立的一个平台. Node.js是一个事件驱动 I/O ...
- jquery全选 不全选
<input type="checkbox" id="check">点击 <input type="checkbox" c ...
- connection reset by peer
connection reset by peer https 请求返回下面的内容 {"msg":"connection reset by peer"," ...
- 虚拟机设置IP
方式NAT 版本信息VMware(14.1.1 build-7528167)和centos7 一,设置网络适配器: 二.设置虚拟网络 三.配置虚拟机(/etc/sysconfig/network-sc ...
- CodeForces #549 Div.2 ELynyrd Skynyrd 倍增算法
题目 这道题目实际上可以用动态规划来做. 对于每个区间,我们从右边边界,往左边走,如果能走n-1次,那说明以右边边界为起点存在一个题目中说的子链. 利用倍增算法,实际上倍增也是动态规划.f[i][j] ...
- PHP字符串处理 单引号 双引号 heredoc nowdoc 定界符
---恢复内容开始--- 2019年2月22日09:49:54 参考文档: http://php.net/manual/zh/language.types.string.php#language. ...
- 安装配置Greenplum
一.规划 1.服务器: 192.168.0.191 gpdb01 # master 192.168.0.192 gpdb02 # primary segment . ...
- vue 使用
[1_01 vue的双向绑定] [1_02 Vue Slot] [vue实例属性template不能使用] [vue-property-decorator 提供 OO 的风格 Vue Componen ...
- 使用charles模拟慢速网络
1.设置慢速网络 点击导航栏的proxy---throttle setting来设置想要的网络情况, 其中有两种方法: (1)勾选Enable Throttling,在Throttle presett ...