shell 笔记 之字符串操作、函数、变量作用域
字符串操作太常见了。
#!/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
相关推荐
大牛牛 2020-06-14
bigNoseLiu 2020-06-10
laisean 2020-05-09
liushun 2020-04-23
Crazyshark 2020-06-13
laisean 2020-11-11
Julyth 2020-10-16
laisean 2020-09-27
flycappuccino 2020-09-27
liguojia 2020-09-27
tvk 2020-07-30
Zaratustra 2020-06-26
IsanaYashiro 2020-06-16
87201442 2020-10-15
MXstudying 2020-09-05
WasteLand 2020-09-15
<?php. if (!empty($_POST)) {. $data1 = $_POST["data1"];$data2 = $_POST["data2"];$fuhao = $_POST["fuh
mathchao 2020-09-15
Zaratustra 2020-07-29