shell技巧分享(七)

作者: songleo | 来源:发表于2018-07-23 13:34 被阅读1次

    这是一个系列文章,主要分享shell(部分功能仅适用于bash)的使用建议和技巧,每次分享3点,希望你能有所收获。

    1 echo替换字符串

    $ s="123abc123abc"
    $ echo ${s/123/456}
    456abc123abc
    $ echo ${s//123/456}
    456abc456abc
    
    

    如果需要替换字符串中的某些字符,可以借助echo命令实现该功能。由示例中可以看到,使用一个斜杠(/)只替换首次出现的字符,使用2个斜杠(//)替换所有字符。

    2 备份文件

    lbak函数定义:

    lbak(){
        if [[ $# -ge 1 ]]; then
            cp -rf $1 $1.bak
        fi
    }
    

    示例:

    $ ls
    $ touch test
    $ echo 123 > test
    $ cat test 
    123
    $ lbak test 
    $ ls
    test  test.bak
    $ cat test.bak 
    123
    

    在linux上修改某些关键文件时,建议先将原文件备份再修改,不然修改后出问题,想恢复比较不易。通过定义一个lbak函数,自动实现文件备份,生成后缀名为bak的备份文件。由示例中可以看到,创建的test文件,在修改之前,通过lbak命令备份该文件,备份后会在当前目录自动生成一个test.bak文件,如果修改完test文件后,需要恢复该文件,直接将test.bak覆盖test文件即可,所以也可以定义一个lunbak函数,用于自动将备份文件恢复。

    3 命令行子命令自动补齐

    $ cat demo.bash 
    _demo()
    {
        COMPREPLY=()
        local cur=${COMP_WORDS[COMP_CWORD]};
        local cmd=${COMP_WORDS[COMP_CWORD-1]};
        case $cmd in
    
        'demo')
              COMPREPLY=( $(compgen -W 'foo bar help version' -- $cur) ) ;;
        '*')
              ;;
        esac
    }
    
    complete -F _demo demo
    $ source demo.bash 
    $ demo 
    bar      foo      help     version  
    

    linux的自动补齐功能非常强大,通过其提供的框架,可以给自己的命令行添加自动补齐功能。由示例中可以看到,首先创建一个demo.bash的shell脚本,该脚本需具有可执行权限,然后在当前终端source该脚本。此时,如果执行demo命令,按tab键会自动打印出相应的子命令,如果输入子命令的首字母按tab键,会自动补齐子命令,很方便就能实现子命令的自动补齐功能。

    相关文章

      网友评论

        本文标题:shell技巧分享(七)

        本文链接:https://www.haomeiwen.com/subject/ojtjmftx.html