`
wen866595
  • 浏览: 272947 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

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

 

 

 

分享到:
评论

相关推荐

    Linux新手生存笔记[10]——shell脚本基础3-函数及常用命令.pdf

    函数内部可以使用`local`关键字定义只在函数内部作用域有效的变量。 2. **退出状态**: 函数执行完毕后会返回一个退出状态,这个值可以通过`return`命令指定,范围是0到255,其中0表示成功,非0表示错误。如果没有...

    Linux shell脚本的补充

    本文将深入讲解Linux shell脚本的几个核心知识点,包括Shebang、变量、作用域、特殊参数变量、状态变量、内置命令、字符串操作以及文件管理。 首先,Shebang(#!/bin/bash)是shell脚本的第一行,它指定了脚本应...

    bash笔记-02-变量.doc

    按照变量作用域** 变量按其作用域可以分为两类:环境变量与局部变量。 - **环境变量(Environment Variables)**: 这类变量对所有的bash进程有效。可以通过`env`或者`printenv`命令来查看环境变量。环境变量名...

    学校Linux上课笔记:shell和语法,和notability一起听录音加mindmaster一起总结.pdf

    【Linux Shell笔记】 Shell是Linux操作系统中的一个命令解释器,同时也是一种编程语言,它使得用户可以通过命令行与系统进行交互。在Linux课程中,我们学习了shell的不同启动方式、shell脚本的基本元素以及变量和...

    vbscript-follow笔记

    6. **对象**:VBScript的一个强大之处在于它的ActiveX对象,如FileSystemObject用于文件操作,WScript.Shell用于执行系统命令。通过这些对象,可以实现丰富的功能,如读写文件、创建目录、启动程序等。 7. **路径...

    Python 从入门到深入.docx

    - 将格式化的字符串存储为变量的方法。 - **长行打印输出** - 处理超过一行的长字符串输出。 - **打印含有引号的字符串** - 如何在输出的字符串中包含单引号或双引号。 - **打印输出到文件** - 将输出重定向到...

    基于python的学习笔记(附代码)

    这些章节深入讲解了Python的核心概念,如变量、运算符、函数参数、作用域、迭代、生成器、模块导入和打包、类的继承、异常处理等。 第二部分:标准库 Python的标准库提供了一系列预装模块,涵盖了各种用途,如文本...

    python-notes22.zip_zip

    2. **Python语法**:如变量、数据类型(整型、浮点型、字符串、布尔型、列表、元组、字典、集合)、注释、字符串格式化、运算符优先级等。 3. **控制流程**:涉及条件语句(if-else)、循环结构(for、while)、...

Global site tag (gtag.js) - Google Analytics