shell笔记之字符串操作、函数、变量作用域



shell笔记之字符串操作、函数、变量作用域
 
字符串操作太常见了。
 
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  
 www.2cto.com  
# 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}  
   www.2cto.com  
shell里还可以定义函数,函数可以像脚本一样调用。
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  
 www.2cto.com  
# 使用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  

相关内容

    暂无相关文章