EvenChan's Ops.

实用的bash自定义脚本

字数统计: 1.4k阅读时长: 6 min
2020/08/13

工作越久 越能发现bash 自动化脚本的实用与好处 bash 用得好的话 在提升工作效率方面说“积小流而成江海”也不为过

前置条件

所有命令只在 MacOS 系统上测试使用 同时都是写入 ~/.bash_profile 然后 source ~/.bash_profile 进行更新应用(有些也可能是 .bashrc)

为了省事 我直接将开启 编译 bash_profile 的命令成别名

1
2
3
BASH_PROFILE_PATH="$HOME/.bash_profile"
alias bash.open="open ${BASH_PROFILE_PATH}"
alias bash.src="source ${BASH_PROFILE_PATH}"

实用 alias 别名

bash 的 alias 别名可以说是我用得最多的功能了 在我理解看来 它像是一个简单函数 内在组合了一些繁琐的逻辑流程 对外只暴露一个优雅的别名

1、Git 系列

实际开发中 常用的 git 命令来来回回也就几个 既然熟背于心 那又何苦一遍遍重新敲命令来浪费时间呢 以下是我常用的别名

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
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"

简简单单几个字符就可以对 Git 项目在命令行中查看 提交 对比等

2、工作流系列

工作中经常打开的应用 切换的目录 完全可以写成别名节省时间

1
2
3
4
5
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"

还可以在 vscode 中安装 ‘code’ 命令。

超实用 bash 自定义脚本,分分钟提升工作效率

这样你就可以在命令行中快速用 vscode 打开项目

1
code PROJECT

3、工具系列

1
2
3
4
5
6
7
8
9
10
11
# Fix `tree` chinese encode
alias tree="tree -N"

# Fix `stat` to default verbose
alias stat="stat -x"

# A nicer way to ls
alias ll="exa -lhaBgb --git"

# Copy pwd to clipboard
alias pwd.cp="pwd | pbcopy"

这里需要留意的是 tree exa 命令在 MacOS 下都需要手动安装

1
2
brew install tree
brew install exa

以下 tree 的效果:

超实用 bash 自定义脚本,分分钟提升工作效率

以下 ll 的效果:

超实用 bash 自定义脚本,分分钟提升工作效率


编写 shell 函数

1、快速创建递归文件夹并切换工作路径

这个不多说了 相当实用

1
2
3
mkcd () {
mkdir -p $1 && cd "./$1"
}

2、快速查看IP

快速查看本地的 ip 地址 同时自动复制到粘贴板

1
2
3
4
5
6
7
alias ip="ifconfig | grep -oE 'inet.*netmask' | grep -oE '(\d+\.){3}\d+' | sed -n 2p"

ipl () {
IP=$(ip)
echo $IP | pbcopy
echo "local IP address: $IP"
}

3、快速查看磁盘空间

速度很快

1
2
3
4
ds () {
echo "Disk Space Utilization For $HOSTNAME"
df -h
}

4、计算汉字数量

ggrep 需要手动装一下

1
2
3
countHan() {
ggrep -roP '[\p{Han}]' $1
}

5、正则切换 Git 分支

切换分支的时候不想输入分支全名怎么办 偷懒方法 当然是通过写正则来切换啦

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
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 -s
echo # print blank line
if [[ $REPLY =~ ^[Yy]$ ]]; then
git checkout $TARGET
else
echo "Still on original branch"
fi
fi
}

建议大家体验一下 十分优雅~

修改命令行提示符

在 ~/.bash_profile 或者 ~/.bashrc 设置命令行提示符。

1
2
3
PS1='\033[0;32m\]\[\033[0m\] \w $ '

export PS1

如果有人问我自定义提示符有什么用 当然是因为有趣啊

环境变量

在 vscode 中设置环境变量 VSCODE,然后再在 .bash_profile 中就可以读取变量,并根据此变量设定不同的命令行提示符。

1
2
3
4
5
6
7
8
9
10
11
# 执行 .profile 文件,读取其中的环境变量
if [ -f ~/.profile ]; then
. ~/.profile
fi

# 如果环境变量匹配,则重置提示符
if [[ $VSCODE == 'sulirc@vscode' ]]; then
echo "Ah choo~~ $USER, welcome to vscode terminal! ( ͡° ͜ʖ ͡°)✧";
echo "";
PS1='\w $ '
fi

便利脚本集合

1、快速查单词

1
2
grep -i '^c..fu..r$' /usr/share/dict/words
复制代码

2、快速清空文件

利用重定向输出快速清空文件,十分便捷。

1
> filename.txt

3、设置脚本可执行权限

对于脚本文件,有两个常见的权限设置:权限为 755 的脚本,则每个人都能执行,和权限为700的脚本,只有文件所有者能够执行。注意为了能够执行脚本,脚本必须是可读的。

1
chmod 755 script.sh

当然实际上你需要更深入了解 chmod 命令,比如 ugo 分组,rwx 权限等,才能细粒度的使用。

4、忽略标准输出错误

亲爱的垃圾桶 /dev/null

1
$ non-exist-command 2> /dev/null

vim 配置

修改 ~/.vimrc 进行 vim 格式化配置。

1
2
3
4
:syntax on
:set hlsearch
:set tabstop=4
:set autoindent

这样在 vim 里也能语法高亮,同时编辑 bash 时能自动缩进。

超实用 bash 自定义脚本,分分钟提升工作效率


掌握 bash 的基本原理 循环 判断 函数 组合表达式 以及正则等 都不是一蹴而就的事情 多练习 多思考 勤查手册 技能慢慢就会提升 然后你会发现读懂以前觉得神奇的 bash 脚本简直不要太简单

CATALOG
  1. 1. 前置条件
  2. 2. 实用 alias 别名
  3. 3. 编写 shell 函数
  4. 4. 修改命令行提示符
  5. 5. 环境变量
  6. 6. 便利脚本集合
  7. 7. vim 配置