shell技巧分享(七)

這是一個系列文章,主要分享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鍵,會自動補齊子命令,很方便就能實現子命令的自動補齊功能。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章