1 介绍
本文介绍一些我写 Bash 脚本常用的技巧,帮助我们写一些比较复杂的 Bash 脚本。说句题外话,我个人觉得用 Bash 写脚本还是比 Python 方便,当然用 Python 写更简单,门槛更低。但是 Python 太大了,很多嵌入式系统中根本不适合安装,而 Bash 的话就没有这个问题。从我的经验来说,我觉得嵌入式系统更适合用 Bash,功能也足够强大。
2 通用模块
1 命令行解析
Bash 脚本通常需要通过命令行输入参数,这时候一个好的命令行解析功能就相当重要。这里提供一个可以解析 Option 和 Command 的解析函数。
#! /usr/bin/env bash
COMMAND=""
# hint for users
function show_usage() {
cat <<EOF
Usage: $0 [options] ...
OPTIONS:
-h, --help Display this help and exit.
-a, --aoption Change it to your option.
-b, --boption Change it to your option.
acommand Change it to your command.
bcommand Change it to your command.
EOF
}
function acommand() {
# do acommand
}
function bcommand() {
# do bcommand
}
function parse_cmdline() {
# show hint when there is no args
if [ "$#" -eq 0 ]; then
show_usage
exit 0
fi
while [ $# -gt 0 ]; do
local cmd="$1"
shift
case "${cmd}" in
acommand)
COMMAND="start"
;;
bcommand)
COMMAND="save"
;;
-a| --aoption)
some_avalue=$1
shift
;;
-b| --boption)
some_bvalue=$1
shift
;;
-h | --help)
show_usage
exit 0
;;
-* | --*)
show_usage
exit 1
;;
esac
done
}
parse_cmdline "$@"
${COMMAND}
3 一些技巧
- 经常使用 bash -c
当我们需要执行多条命令,并且可能涉及到一些改变当前环境的操作时,我们可以使用 bash -c “commnad1; command2; command3”,这样会创造出一个独立的 bash 环境,方便的将这些组合命令在一个环境中执行完成。 前面也可以加上 sudo 创造一个 root 环境。
- ssh 运行后台命令时记得加上 >/dev/null 2>&1 &
如果不加,进程会一直有输出到 ssh tunnel,而由于是后台进程,tunnel 执行完已经关闭了,会导致执行出错。总之在使用 ssh 运行长时间命令的时候尽量不要输出,有输出会很容易出现问题。