zoukankan      html  css  js  c++  java
  • shell(shell函数、shell正则表达式)

    本章内容

    1. shell函数
    2. shell正则表达式

    1、shell函数

    linux shell 可以用户定义函数,然后在shell脚本中可以随便调用.

    格式:

    funname () {
    
           CMD  #函数体
    
    }
    

    例子:

    #!/bin/bash 
    fun () {
    echo "hello world"
    }
    fun
    ...
    ╭─root@localhost.localdomain ~  
    ╰─➤  bash test8.sh
    hello world
    
    

    return 函数传参

    #!/bin/bash 
    fun () {
    echo "hello world"
    return $i
    }
    for i in {1..4}
    do
    fun
    done
    ...
    ╭─root@localhost.localdomain ~  
    ╰─➤  bash test8.sh
    hello world
    hello world
    hello world
    hello world
    ╭─root@localhost.localdomain ~  
    ╰─➤  echo $?    
    4
    

    return 在函数中定义状态返回值
    返回并终止函数
    返回的只能是 0-255 的数字,类似于 exit

    #!/bin/bash 
    fun () {
    echo "hello world"
    return $i
    echo "how beautiful!"
    }
    for i in {1..4}
    do
    fun return
    done
    ...
    ╭─root@localhost.localdomain ~  
    ╰─➤  bash test8.sh
    hello world
    hello world
    hello world
    hello world
    
    

    函数参数

    摘自菜鸟教程:https://www.runoob.com/linux/linux-shell-func.html
    在Shell中,调用函数时可以向其传递参数。在函数体内部,通过 $n 的形式来获取参数的值,例如,$1表示第一个参数,$2表示第二个参数...
    带参数的函数示例:

    #!/bin/bash
    # author:菜鸟教程
    # url:www.runoob.com
    
    funWithParam(){
        echo "第一个参数为 $1 !"
        echo "第二个参数为 $2 !"
        echo "第十个参数为 $10 !"
        echo "第十个参数为 ${10} !"
        echo "第十一个参数为 ${11} !"
        echo "参数总数有 $# 个!"
        echo "作为一个字符串输出所有参数 $* !"
    }
    funWithParam 1 2 3 4 5 6 7 8 9 34 73
    
    [test@root]:# bash funWithParam
    
    #输出结果: 
    第一个参数为 1 !
    第二个参数为 2 !
    第十个参数为 10 !
    第十个参数为 34 !
    第十一个参数为 73 !
    参数总数有 11 个!
    作为一个字符串输出所有参数 1 2 3 4 5 6 7 8 9 34 73 !
    
    #注意,$10 不能获取第十个参数,获取第十个参数需要${10}。当n>=10时,需要使用${n}来获取参数。 
    

    另外,还有几个特殊字符用来处理参数:

    参数处理
    # 说明
    $#  -->#传递到脚本或函数的参数个数
    $*  --># 以一个单字符串显示所有向脚本传递的参数
    $$  -->#脚本运行的当前进程ID号
    $!  -->#后台运行的最后一个进程的ID号
    $@  -->#与$*相同,但是使用时加引号,并在引号中返回每个参数。
    $-   -->#显示Shell使用的当前选项,与set命令功能相同。
    $?  -->#显示最后命令的退出状态。0表示没有错误,其他任何值表明有错误。
    

    2、正则表达式(基于grep讲解)

    • 功能就是用来检索、替换那些符合某个模式(规则)的文本,正则表达式在每种语言中都会有;
    • 正则表达式就是为了处理大量的文本或字符串而定义的一套规则和方法
    • 通过定义的这些特殊符号的辅助,系统管理员就可以快速过滤,替换或输出需要的字符串
    • Linux正则表达式一般以行为单位处理

    基础正则表达式

    符号 描述
    . 匹配任意单个字符(必须存在)
    ^ 匹配以某个字符开头的行
    $ 配以什么字符结尾的行
    * 匹配前面的一个字符出现0次或者多次;eg:a*b
    .* 表示任意长度的任意字符(*号表示前面的.出现0次或多次,.表示任意字符且存在)
    [] 表示匹配括号内的一个字符(不是字符串)
    [^] 匹配[^字符]之外的任意一个字符
    [] 匹配非[^字符]内字符开头的行
    < 锚定 单词首部;eg:<root
    > 锚定 单词尾部:eg:>root
    {m,n} 表示匹配前面的字符出现至少m次,至多n次
    () 表示对某个单词进行分组;1表示第一个分组进行调用

    扩展正则

    • egrep ...
    • grep -E ...
    • 扩展正则支持所有基础正则;并有补充
    • 扩展正则中{}和[]不用转义可以直接使用;
    符号 描述
    + 表示前面的字符至少出现1次的情况
    | 表示“或”
    表示前面的字符至多出现1次的情况

  • 相关阅读:
    csu1804
    uvalive4513
    poj3264(Sparse-Table 算法模板)
    uva11107(后缀数组)
    poj2774(最长公共子串)
    uvalive4108(线段树)
    hdu5306 Gorgeous Sequence
    bzoj2823: [AHOI2012]信号塔&&1336: [Balkan2002]Alien最小圆覆盖&&1337: 最小圆覆盖
    bzoj3330: [BeiJing2013]分数
    bzoj1283: 序列
  • 原文地址:https://www.cnblogs.com/du-z/p/10968051.html
Copyright © 2011-2022 走看看