工作越久,越能發現bash 自動化腳本的實用與好處。bash 用得好的話,在提升工作效率方面說“積小流而成江海”也不為過。今天分享一些 bash 常用工具。
前置條件
本文提到的所有命令只在 MacOS 系統上測試使用,同時都是寫入 ~/.bash_profile 然後 source ~/.bash_profile 進行更新應用(有些也可能是 .bashrc)。
為了省事,我直接將開啟、編譯 bash_profile 的命令成別名。
<code>BASH_PROFILE_PATH="
$HOME
/.bash_profile"alias
bash.open="open
${BASH_PROFILE_PATH}
"alias
bash.class="lazy" src="//p2.ttnews.xyz/loading.gif" data-original="source
${BASH_PROFILE_PATH}
" 複製代碼/<code>
實用 alias 別名
bash 的 alias 別名可以說是我用得最多的功能了,在我理解看來,它像是一個簡單函數,內在組合了一些繁瑣的邏輯流程,對外只暴露一個優雅的別名。
1、Git 系列
實際開發中,常用的 git 命令來來回回也就幾個,既然熟背於心,那又何苦一遍遍重新敲命令來浪費時間呢?以下是我常用的別名。
<code>alias
g="git"
alias
gb="git branch"
alias
ga="git add"
alias
gaa="git add ."
alias
gap="git add -p"
alias
gs="git status"
alias
gco="git checkout"
alias
gcp="git cherry-pick"
alias
gcm="git commit -m"
alias
gcma="git commit --amend"
alias
gcl="git clone"
alias
glo="git log"
alias
glog="git log --graph --oneline"
alias
glol="git log --oneline"
alias
gdif="git diff HEAD^ HEAD"
複製代碼/<code>
簡簡單單幾個字符就可以對 Git 項目在命令行中查看、提交、對比等。
2、工作流系列
工作中經常打開的應用、切換的目錄,完全可以寫成別名節省時間。
<code>alias
vscode='open -a /Applications/Visual\ Studio\ Code.app/'
alias
cd.desk="cd ~/Desktop"
alias
cd.byte
="cd ~/Desktop/Bytedance"
alias
cd.nginx="cd /usr/local/etc/nginx"
alias
ip="ifconfig | grep -oE 'inet.*netmask' | grep -oE '(\d+\.){3}\d+' | sed -n 2p"
複製代碼/<code>
還可以在 vscode 中安裝 'code' 命令。
這樣你就可以在命令行中快速用 vscode 打開項目。
<code>code
PROJECT 複製代碼/<code>
3、工具系列
<code>alias
tree="tree -N"
alias
stat
="stat -x"
alias
ll="exa -lhaBgb --git"
alias
pwd.cp="pwd | pbcopy"
複製代碼/<code>
這裡需要留意的是 tree、exa 命令在 MacOS 下都需要手動安裝。
<code>brew
install tree
brew
install exa
複製代碼
/<code>
以下 tree 的效果:
以下 ll 的效果:
編寫 shell 函數
1、快速創建遞歸文件夾並切換工作路徑
這個不多說了,相當實用。
<code>mkcd
() {mkdir
-p$1
&& cd"./
$1
" } 複製代碼/<code>
2、快速查看IP
快速查看本地的 ip 地址,同時自動複製到粘貼板。
<code>alias
ip="ifconfig | grep -oE 'inet.*netmask' | grep -oE '(\d+\.){3}\d+' | sed -n 2p"
ipl
() { IP=$(ip)echo
$IP
| pbcopyecho
"local IP address:
$IP
" } 複製代碼/<code>
3、快速查看磁盤空間
速度很快。
<code>ds
() {echo
"Disk Space Utilization For
$HOSTNAME
" df -h } 複製代碼/<code>
4、計算漢字數量
ggrep 需要手動裝一下。
<code>countHan
() { ggrep -roP'[\p{Han}]'
$1
} 複製代碼/<code>
5、正則切換 Git 分支
切換分支的時候不想輸入分支全名怎麼辦?偷懶方法,當然是通過寫正則來切換啦。
<code>gcof
() { REGEX=$1
TARGET="
$(g branch | grep -E $REGEX | grep -vx "\*.*" | head -n 1 | tr -d '[:space:]')
" if
[[ -z$TARGET
]];then
echo
"Use regex '
$REGEX
' to match null"else
echo
"Use regex '
$REGEX
' to match branch '$TARGET
'"read
-p"Are you sure to checkout branch '
$TARGET
' [Y/N]" -n 1 -secho
if
[[$REPLY
=~ ^[Yy]$ ]];then
git checkout$TARGET
else
echo
"Still on original branch"
fi
fi
} 複製代碼/<code>
建議大家體驗一下,十分優雅~
修改命令行提示符
在 ~/.bash_profile 或者 ~/.bashrc 設置命令行提示符。
<code>PS1='\033[0;32m\]\[\033[0m\] \w $ '
export
PS1 複製代碼/<code>
如果有人問我自定義提示符有什麼用?當然是因為有趣啊。
環境變量
在 vscode 中設置環境變量 VSCODE,然後再在 .bash_profile 中就可以讀取變量,並根據此變量設定不同的命令行提示符。
<code>if
[ -f ~/.profile ];then
. ~/.profilefi
if
[[$VSCODE
=='sulirc@vscode'
]];then
echo
"Ah choo~~
$USER
, welcome to vscode terminal! ( ͡° ͜ʖ ͡°)✧";echo
""
; PS1='\w $ '
fi
複製代碼/<code>
便利腳本集合
1、快速查單詞
<code>grep
-i'^c..fu..r$'
/usr/share/dict/words 複製代碼/<code>
2、快速清空文件
利用重定向輸出快速清空文件,十分便捷。
<code>>filename
.txt
複製代碼/<code>
3、設置腳本可執行權限
對於腳本文件,有兩個常見的權限設置:權限為 755 的腳本,則每個人都能執行,和權限為700的腳本,只有文件所有者能夠執行。注意為了能夠執行腳本,腳本必須是可讀的。
<code>chmod
755script
.sh
複製代碼/<code>
當然實際上你需要更深入瞭解 chmod 命令,比如 ugo 分組,rwx 權限等,才能細粒度的使用。
4、忽略標準輸出錯誤
親愛的垃圾桶 /dev/null
<code>$ non-exist-command2
>/dev/
null
複製代碼/<code>
vim 配置
修改 ~/.vimrc 進行 vim 格式化配置。
<code>:syntaxon
:set
hlsearch :set
tabstop=4
:set
autoindent 複製代碼/<code>
這樣在 vim 裡也能語法高亮,同時編輯 bash 時能自動縮進。
掌握 bash 的基本原理,循環、判斷、函數、組合表達式,以及正則等,都不是一蹴而就的事情,多練習、多思考、勤查手冊,技能慢慢就會提升,然後你會發現讀懂以前覺得神奇的 bash 腳本簡直不要太簡單。