shell脚本的一些常用操作

Posted linwenbin

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了shell脚本的一些常用操作相关的知识,希望对你有一定的参考价值。

 字符串长度:

${#string}可获取string字符串的长度,如下:

[email protected]:~$ str="who are you"
[email protected]:~$ echo ${#str}
11

${string:position:length}表示在字符串string中截取从position开始长度为length的字符串,shell脚本字符串的起始位置与python一致也是从0开始算的

[email protected]:~$ str="who are you"
[email protected]:~$ echo {str:2:5}
{str:2:5}
[email protected]:~$ echo ${str:2:5}
o are

字符串截取(不匹配字符)
符号 含义解析
${string#substring} 从变量${string}的开头, 删除最短匹配${substring}的子串
${string##substring} 从变量${string}的开头, 删除最长匹配${substring}的子串
${string%substring} 从变量${string}的结尾, 删除最短匹配${substring}的子串
${string%%substring} 从变量${string}的结尾, 删除最长匹配${substring}的子串
我们可以总结一下规律:

换句话来说,#总是表示左边算起,%总是表示右边算起;一个符号表示最短匹配,两个符号表示最长匹配。

[email protected]:~$ str="who are you"
[email protected]:~$ echo ${str#"who"}
are you
[email protected]:~$ echo ${#str%"you"}
-bash: ${#str%"you"}: bad substitution
[email protected]:~$ 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脚本的常用循环

轻度Linux服务器维护人员常用的Shell脚本命令

Shell脚本入门 04:算术与逻辑运算

shell 脚本常用调试方法

shell脚本常用命令汇总

Shell脚本基本命令大全