Shell 脚本入门
Table of Contents
1 关于 shell
- shell 不是一堆 bash 命令的集合
- shell 是一个脚本语言,类似 python, 充当浇水
2 如何解决 90% 的问题
3 常用函数
3.1 日志
LOG_INFO() { set +x local msg=$* printf '[\033[1;32mINFO \033[0m]' printf '[\033[0;34m%-s\033[0m]' "$(date +'%Y-%m-%d %H:%M:%S')" printf '[\033[0;32m%-s:%d\033[0m]' "$0" "$LINENO" printf ' %-s\n' "${msg}" [[ ${DEBUG_MODE} -gt 0 ]] && set -x || set +x } LOG_WARNING() { set +x local msg=$* printf '[\033[1;33mWARN \033[0m]' printf '[\033[0;34m%-s\033[0m]' "$(date +'%Y-%m-%d %H:%M:%S')" printf '[\033[0;33m%-s:%d\033[0m]' "$0" "$LINENO" printf ' %-s\n' "${msg}" [[ ${DEBUG_MODE} -gt 0 ]] && set -x || set +x } LOG_ERROR() { set +x local msg=$* printf '[\033[1;31mERROR\033[0m]' printf '[\033[0;34m%-s\033[0m]' "$(date +'%Y-%m-%d %H:%M:%S')" printf '[\033[0;31m%-s:%d\033[0m]' "$0" "$LINENO" printf ' %-s\n' "${msg}" [[ ${DEBUG_MODE} -gt 0 ]] && set -x || set +x } LOG_INFO "this is an info" LOG_WARNING "this is a warning" LOG_ERROR "this is an error"
效果:
4 常用操作
4.1 参数
- 函数入参取值
$N
- 函数入参取全部
$*
,空格分割- 函数入参偏移
shift N
偏移后取全部取的是偏移后的值,类似 python *args- 取入参数目
$#
- 取shell内最近一个线程执行状态
$?
- 取shell内最近一个线程的线程号
$!
4.2 异常捕捉
通过
||
或&&
实现异常捕捉echo ${input} || exit ${EXIT_INPUT_ERROR}
高级一点的方式,统计失败个数
FAIL_COUNT=0 echo ${input} || let "FAIL_COUNT+=1"
- 通过
trap
异常捕捉1