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