字符串操作太常见了。
#!/bin/bash
# 字符串截断
# 1 使用简单命令截断 basename dirname
# dirname 返回basename丢弃的另一部路径。
echo 'basename /usr/local/share/doc/foo/foo.txt is :'
basename /usr/local/share/doc/foo/foo.txt
echo
echo 'basename /usr/local/share/doc/foo/foo.txt is :'
basename /usr/local/share/doc/foo/foo.txt
# 2 带通配符的截断
myvar=foodforthought.jpg
echo 'myvar='${myvar} and '${myvar##*fo} is :'
echo ${myvar##*fo}
# 在${}中输入变量名,两个##,然后三个通配符("*fo")
# bash先取得myvar,找到字符串"foodforthought.jpg"开始处,且匹配通配符"*.fo"的 最长字符串,然后将其从字符串的开始处截去。
echo '${myvar#*fo} is :'
echo ${myvar#*fo}
# 只有一个#,bash从开始字符串截去 最短 的匹配。
# 当搜索最长匹配时,使用##(因为##比#长);当搜索最短匹配时,使用#。
myfoo="chickensoup.tar.gz"
echo 'myvar='${myfoo} and '${myfoo%%.*} is :'
echo ${myfoo%%.*}
echo
echo '${myfoo%.*} is :'
echo ${myfoo%.*}
# 除了将匹配通配符从字符串末尾除去之外,%和%%变量扩展选项与#和##的工作方式相同
# 3 根据特定字符偏移和长度(用冒号分隔) 来选择特定的子字符串。
# 必须使用bash来解释执行,否则会报错: bash string.sh
exclatm=cowabunga
echo exclatm=${exclatm}, '${exclatm:0:3} is :'
echo ${exclatm:0:3}
echo exclatm=${exclatm}, '${exclatm:-1:3} is :'
echo ${exclatm:-1:3}
echo
echo '${exclatm:3:7} is :'
echo ${exclatm:3:7}
# 字符串长度 ${#parameter}
var="hello world"
echo length of \"$var\" is : ${#var}
# ${parameter/pattern/string} shell像文件名扩展那样扩展pattern,并替换parameter扩展后的值中最长的匹配模式(若存在匹配模式的话)。为了在parameter扩展后的值开头匹配模式,则附上前缀#,如果要在值末尾匹配模式,则附上前缀%。如果string为空,则末尾的/可能被忽略,匹配将被删除。使用@或$即可对列表中的每个参数进行模式替换。
# ${parameter//pattern/string} 对所有的匹配(而不只是第一个匹配)执行替换。
x="a1 b1 c2 d2"
echo '${x/1/3} is :' ${x/1/3}
echo '${x//1/3} is :' ${x//1/3}
echo '${x//?1/3} is :' ${x//?1/z3}
shell里还可以定义函数,函数可以像脚本一样调用。
#!/bin/bash
echo '$2'": $2"
tarview() {
echo -n "displaying contents of $1"
postfix=${1##.}
case $postfix in
tar)
echo "(uncompressed tar)"
tar tvf $1
;; # 一个分支的结束
gz)
echo "(gzip compressed tar)"
tar tzvf $1
;;
bz2)
echo "(bzip2-compressed tar)"
cat $1 bzip2 -d | tar tvf -
;;
*)
echo "unhandle type ."
;;
esac
echo "tarview $2"
}
tarview
myfun() {
echo "myfun $1, $2"
}
# 调用函数时,如果没有传参,则引用脚本的变量。
# 函数里的参数与脚本从命令行接收变量类似,$n (n>0)表示第n个变量;
# $0 将扩展成字符串bash(如果从shell交互运行函数)或 调用函数的脚本名称。
myfun abc
# 名称空间。在bash中,每当在函数内部创建环境变量,就将其添加到 全局名称空间。
myvar=hello
myfunc() {
myvar="one two three"
for x in $myvar
do
echo $x
done
}
myfunc
echo $myvar $x
# 使用local关键字定义局部变量
myvar=hello
localFunc() {
echo '$0'": $0"
local x
local myvar="one two three"
for x in $myvar
do
echo $x
done
}
localFunc
echo $myvar $x
分享到:
相关推荐
在Linux环境中,Shell编程是一种非常重要的自动化脚本编写技术,而字符串操作又是Shell编程中不可或缺的一部分。本知识点将介绍Shell编程中字符串操作的相关知识,内容涉及字符串的基本概念、属性以及常见的字符串...
内容概要:shell脚本入门——变量、字符串, 本文详细介绍了 Shell 脚本中变量和字符串的基本操作,包括变量的定义、使用和作用域,以及字符串的定义、操作和拼接。通过具体的代码示例,解释了如何定义和使用变量,...
### Shell 字符串操作详解 #### 一、引言 在Shell编程中,字符串操作是一项基本而重要的技能。无论是简单的脚本还是复杂的自动化任务,掌握如何有效地操作字符串都是提高脚本功能性和性能的关键。本文将详细介绍...
这篇博客“shell批量处理字符串指令行”可能探讨了如何利用shell的特性来处理字符串,包括查找、替换、截取等操作。 首先,让我们了解一些基本的shell字符串处理命令: 1. **变量赋值**:在shell中,我们可以通过`...
Shell 字符串截取是指在 Shell 编程中对字符串进行截取、查找、替换等操作。下面将详细介绍 Shell 字符串截取的知识点。 一、字符串截取 Shell 字符串截取可以使用多种方法,以下是一些常见的方法: 1. 使用 expr...
这是Shell脚本中最常用的计算字符串长度的方法之一。通过将字符串赋值给一个变量,然后使用 `${#variable}` 的形式即可获取其长度。 **示例代码**: ```bash name="Alex" echo ${#name} ``` 这种方法非常直观且易于...
在Shell脚本编程中,对字符串进行截取是常见的操作之一。通过对字符串的处理,可以实现各种数据解析、文件名提取等实用功能。本文将详细介绍几种常用的Shell中字符串截取方法及其应用场景。 ### 基础概念与应用场景...
其中,字符串操作是Shell脚本中最常见也是最基础的功能之一。本文将深入探讨Shell如何进行字符串操作,特别是变量替换、变量扩充、变量中的变量以及变量的特异功能,帮助读者更熟练地掌握Shell编程技巧。 #### 变量...
### Shell中的字符串处理方法 #### 引言 在Shell编程中,字符串处理是一项重要的技能,尤其是在Linux环境下。本文将深入探讨几种高效的字符串处理技术,并通过实际示例展示这些技巧的应用场景。 #### 字符串截断 ...
涵盖的内容包括变量的定义和赋值、特殊变量的应用、字符串的各种操作如拼接、长度计算、子串提取、查找子串位置、替换子串以及不同类型的引号使用和特殊字符的转义技巧。文章还提供了一个综合案例,展示了如何利用...
linux shell 字符串的截取
在做shell批处理程序时候,经常会涉及到字符串相关操作。有很多命令语句,如:awk,sed都可以做字符串各种操作。 其实shell内置一系列操作符号,可以达到类似效果,大家知道,使用内部操作符会省略启动外部程序等时间...
Shell中的变量主要有三种作用域:局部作用域、全局作用域和环境作用域。 1. 局部作用域:在函数或脚本内部定义的变量默认具有局部作用域,只在定义它们的块或函数内部有效。一旦离开这个区域,变量就会失效,无法在...
普通变量则是局部变量,仅在定义它们的Shell函数或脚本中有效。环境变量需要通过export命令进行导出,使得子进程可以访问。例如,将自定义环境变量NINGJIANCHENG赋值为1的操作是“export NINGJIANCHENG=1”。环境...
将需要替换的文件放到脚本同级目录,直接执行脚本即可。 根据脚本提示输入 替换前和替换后的字符串
最近实现了一个shell脚本,功能简单来说就是从文件中按行读取然后将...按照常理shell中的变量默认是全局变量,不会存在变量作用域的问题,于是上网查了下,发现问题出在while上 while循环读取文件中内容有两种写法,一
在Shell脚本中,了解函数的作用域和变量的作用范围非常重要,这直接影响到函数内部和外部变量的行为。 **示例代码** (testfun2.sh): ```sh #!/bin/sh echo $(uname); declare num=1000; uname() { echo "test!"; ...
一些需要注意的脚本问题 计算字符串长度可用的三种方法: 代码如下: echo “$str”|awk ‘{print length($0)}’ expr length “$str” ... 您可能感兴趣的文章:用Shell判断字符串包含关系的方法小结Shel
字符串的基本操作 脚本 1 # 声明字符串 str01=str01 echo ${str01} # 单引号也可以 # 不过后面的例子, 通常是用 双引号, 具体原因, 以后会解释\nstr02='str02' echo ${str02} # 对引号的转义, 这里就不提了 2. ...