字符串操作太常见了。
#!/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
分享到:
相关推荐
shell 字符串操作 关于字符的常用命令
本文由TinyLab.org原创。 本文是自由书籍《Shell编程...第三、对串的常规操作:求子串、插入字符、删除字符、置换字符、字符串的比较等。 第四、对串的一些比较复杂而有趣的操作,这里将在最后介绍一些有趣的范例。
shell中字符串截取shell中字符串截取shell中字符串截取shell中字符串截取shell中字符串截取shell中字符串截取shell中字符串截取shell中字符串截取shell中字符串截取shell中字符串截取shell中字符串截取shell中字符串...
map中的值替换掉字符串中的变量(含运算)
shell 字符串 截取 查找 替换 shell 字符串 截取 查找 替换 shell 字符串 截取 查找 替换 shell 字符串 截取 查找 替换
本文阐述:shell中整数比较方法及字符串的比较方法,如等于,不等于,大于,大于等于,小于,等等
linux shell 字符串的截取
在做shell批处理程序时候,经常会涉及到字符串相关操作。有很多命令语句,如:awk,sed都可以做字符串各种操作。 其实shell内置一系列操作符号,可以达到类似效果,大家知道,使用内部操作符会省略启动外部程序等时间...
Linux Shell字符串比较
NULL 博文链接:https://annan211.iteye.com/blog/2412844
shell 操作字符串
shell中字符串处理方式,Linux下灵活活处理字符串的说明。。
将需要替换的文件放到脚本同级目录,直接执行脚本即可。 根据脚本提示输入 替换前和替换后的字符串
最近实现了一个shell脚本,功能简单来说就是从文件中按行读取然后将...按照常理shell中的变量默认是全局变量,不会存在变量作用域的问题,于是上网查了下,发现问题出在while上 while循环读取文件中内容有两种写法,一
字符串的基本操作 脚本 1 # 声明字符串 str01=str01 echo ${str01} # 单引号也可以 # 不过后面的例子, 通常是用 双引号, 具体原因, 以后会解释\nstr02='str02' echo ${str02} # 对引号的转义, 这里就不提了 2. ...
一、Linux shell 截取字符变量的前8位,有方法如下: 代码如下:1.expr substr “$a” 1 82.echo $a|awk ‘{print substr(,1,8)}’3.echo $a|cut -c1-84.echo $5.expr $a : ‘\(.\\).*’6.echo $a|dd bs=1 count=8 2>...
作用域是我们在日常学习或者工作中经常会遇到的一个问题,下面这篇文章主要给大家介绍了关于Shell中变量作用域的相关资料,文中介绍的非常详细,需要的朋友可以参考借鉴,下面跟着小编来一起学习学习吧。
通过shell语言进行字符串的比较以及实现数值的比较
以下给出一些shell中判断字符串包含的方法,来源程序员问答网站 stackoverflow 以及segmentfault。 方法一:利用grep查找 strA=long string strB=string result=$(echo $strA | grep ${strB}) if [[ $result != ]] ...
主要介绍了Shell脚本中计算字符串长度的5种方法,来自于个人Shell脚本长期的开发经验,需要的朋友可以参考下