`
wen866595
  • 浏览: 268010 次
  • 性别: 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

 

 

 

分享到:
评论

相关推荐

    Shell编程范例之字符串操作-TinyLab原创

    在Linux环境中,Shell编程是一种非常重要的自动化脚本编写技术,而字符串操作又是Shell编程中不可或缺的一部分。本知识点将介绍Shell编程中字符串操作的相关知识,内容涉及字符串的基本概念、属性以及常见的字符串...

    shell 字符串操作

    ### Shell 字符串操作详解 #### 一、引言 在Shell编程中,字符串操作是一项基本而重要的技能。无论是简单的脚本还是复杂的自动化任务,掌握如何有效地操作字符串都是提高脚本功能性和性能的关键。本文将详细介绍...

    shell 批量处理 字符串指令行

    这篇博客“shell批量处理字符串指令行”可能探讨了如何利用shell的特性来处理字符串,包括查找、替换、截取等操作。 首先,让我们了解一些基本的shell字符串处理命令: 1. **变量赋值**:在shell中,我们可以通过`...

    shell字符串的截取

    Shell 字符串截取是指在 Shell 编程中对字符串进行截取、查找、替换等操作。下面将详细介绍 Shell 字符串截取的知识点。 一、字符串截取 Shell 字符串截取可以使用多种方法,以下是一些常见的方法: 1. 使用 expr...

    Shell脚本中计算字符串长度的5种方法

    这是Shell脚本中最常用的计算字符串长度的方法之一。通过将字符串赋值给一个变量,然后使用 `${#variable}` 的形式即可获取其长度。 **示例代码**: ```bash name="Alex" echo ${#name} ``` 这种方法非常直观且易于...

    shell中字符串截取

    在Shell脚本编程中,对字符串进行截取是常见的操作之一。通过对字符串的处理,可以实现各种数据解析、文件名提取等实用功能。本文将详细介绍几种常用的Shell中字符串截取方法及其应用场景。 ### 基础概念与应用场景...

    shell 操作字符串

    其中,字符串操作是Shell脚本中最常见也是最基础的功能之一。本文将深入探讨Shell如何进行字符串操作,特别是变量替换、变量扩充、变量中的变量以及变量的特异功能,帮助读者更熟练地掌握Shell编程技巧。 #### 变量...

    shell中字符串处理方

    ### Shell中的字符串处理方法 #### 引言 在Shell编程中,字符串处理是一项重要的技能,尤其是在Linux环境下。本文将深入探讨几种高效的字符串处理技术,并通过实际示例展示这些技巧的应用场景。 #### 字符串截断 ...

    linux shell 字符串的截取

    linux shell 字符串的截取

    shell字符串处理

    在做shell批处理程序时候,经常会涉及到字符串相关操作。有很多命令语句,如:awk,sed都可以做字符串各种操作。 其实shell内置一系列操作符号,可以达到类似效果,大家知道,使用内部操作符会省略启动外部程序等时间...

    Shell中变量作用域的介绍与使用命令

    Shell中的变量主要有三种作用域:局部作用域、全局作用域和环境作用域。 1. 局部作用域:在函数或脚本内部定义的变量默认具有局部作用域,只在定义它们的块或函数内部有效。一旦离开这个区域,变量就会失效,无法在...

    linux运维学习笔记:Shell变量.pdf

    普通变量则是局部变量,仅在定义它们的Shell函数或脚本中有效。环境变量需要通过export命令进行导出,使得子进程可以访问。例如,将自定义环境变量NINGJIANCHENG赋值为1的操作是“export NINGJIANCHENG=1”。环境...

    shell脚本,批量替换字符串

    将需要替换的文件放到脚本同级目录,直接执行脚本即可。 根据脚本提示输入 替换前和替换后的字符串

    浅谈shell循环中变量的作用域问题

    最近实现了一个shell脚本,功能简单来说就是从文件中按行读取然后将...按照常理shell中的变量默认是全局变量,不会存在变量作用域的问题,于是上网查了下,发现问题出在while上 while循环读取文件中内容有两种写法,一

    linux shell自定义函数(定义、返回值、变量作用域)介绍

    在Shell脚本中,了解函数的作用域和变量的作用范围非常重要,这直接影响到函数内部和外部变量的行为。 **示例代码** (testfun2.sh): ```sh #!/bin/sh echo $(uname); declare num=1000; uname() { echo "test!"; ...

    Shell脚本计算字符串长度和判断字符串为空小技巧

    一些需要注意的脚本问题 计算字符串长度可用的三种方法: 代码如下: echo “$str”|awk ‘{print length($0)}’ expr length “$str” ... 您可能感兴趣的文章:用Shell判断字符串包含关系的方法小结Shel

    Shell 字符串拼接的实现示例

    字符串的基本操作 脚本 1 # 声明字符串 str01=str01 echo ${str01} # 单引号也可以 # 不过后面的例子, 通常是用 双引号, 具体原因, 以后会解释\nstr02='str02' echo ${str02} # 对引号的转义, 这里就不提了 2. ...

    ksh 基础知识 shell简介 变量数组 控制结构 函数 调试

    Shell变量是用来存储数据的容器,可以保存文本字符串、数字或其他信息。有两种类型的变量:本地变量和环境变量。本地变量仅在当前Shell会话中有效,一旦Shell退出或启动新进程,它们就会消失。定义变量使用等号(`=`...

    shell脚本写法:复杂数学式,字符串,布尔值,case写法

    标题中的知识点涵盖了编写Shell脚本时经常会使用的几个关键元素:复杂数学式的处理、字符串的比较、布尔值的表达以及case结构的使用。接下来,我们将详细地对这些元素进行解析和说明。 首先,Shell脚本中的复杂数学...

Global site tag (gtag.js) - Google Analytics