shell

  1. ${var#*.} # 从左边第一个.及左边的删除,保留右边
  2. ${var##*.} # 从右边第一个.及左边的删除,保留右边
  3. ${var%.*} # 从右边第一个.及右边的删除,保留左边
  4. ${var##*.} # 从右边第一个.及右边的删除,保留左边
  5. ${var:7} # 从左边第7个字符开始显示
  6. ${var:7:2} # 从左边第7个字符开始显示2个字符
  7. ${var:0-9} # 从右边第9个字符开始显示到最后
  8. ${var:0-9:2} # 从右边第9个字符开始显示2个字符
  9. pushd DIR # 压入DIR目录到栈空间,并切换到DIR
  10. popd # 切换到出栈目录
  11. env 显示环境变量
  12. set 显示环境变量和SHELL函数
  13. set -u 等价 set -o nounset 遇到不存在的变量直接报错,而不是默认忽略
  14. set -x 等价 set -o xtrace 输出命令本身后再输出命令的结果,默认没有输出命令本身
  15. set -e 等价 set -o errexit 只要脚本发生错误就退出
  16. set -o pipefail 默认情况下管道连接的多条命令以最后一条命令的退出码标识整条命令
  17. 可能出现中间命令失败的问题
  18. 所以需要打开set -o pipefail
  19. 打开后只要子命令失败,整个命令即为失败
  20. 如果某些情况下非零退出码不代表失败可以参考以下命令
  21. set +e 临时关闭-e选项,后续要开启时再执行 set -e
  22. command1 || exit 1 命令1失败后退出,默认情况下失败后继续执行下面的语句
  23. command1 && command2 命令1成功后执行命令2
  24. 使用方式1.
  25. 脚本开头添加 set -euxo pipefail
  26. 使用方式2.
  27. bash -euxo pipefail script.sh
  28. # 脚本模式
  29. (
  30. set -e
  31. main
  32. )
  33. value=$?
  34. if [ $value != 0 ]
  35. then
  36. (
  37. set -e
  38. catch
  39. )
  40. fi
  41. (
  42. set -e
  43. finally
  44. )
  45. exit $value
  46. # 判断file存在并且有内容
  47. if test -s file; then

git

# 子模块更新
if [ -f .gitmodules ] && [ ! -f .ignoresubmodule ]; then
    git submodule update --init --recursive
fi

# 最新提交ID
git rev-parse HEAD