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"

效果:

02_tech_shell_log_image.jpg

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

Footnotes:

Author: 杨 睿

Created: 2022-12-30 Fri 10:49

Validate