shell
${var#*.} # 从左边第一个.及左边的删除,保留右边
${var##*.} # 从右边第一个.及左边的删除,保留右边
${var%.*} # 从右边第一个.及右边的删除,保留左边
${var##*.} # 从右边第一个.及右边的删除,保留左边
${var:7} # 从左边第7个字符开始显示
${var:7:2} # 从左边第7个字符开始显示2个字符
${var:0-9} # 从右边第9个字符开始显示到最后
${var:0-9:2} # 从右边第9个字符开始显示2个字符
pushd DIR # 压入DIR目录到栈空间,并切换到DIR
popd # 切换到出栈目录
env 显示环境变量
set 显示环境变量和SHELL函数
set -u 等价 set -o nounset 遇到不存在的变量直接报错,而不是默认忽略
set -x 等价 set -o xtrace 输出命令本身后再输出命令的结果,默认没有输出命令本身
set -e 等价 set -o errexit 只要脚本发生错误就退出
set -o pipefail 默认情况下管道连接的多条命令以最后一条命令的退出码标识整条命令
可能出现中间命令失败的问题
所以需要打开set -o pipefail
打开后只要子命令失败,整个命令即为失败
如果某些情况下非零退出码不代表失败可以参考以下命令
set +e 临时关闭-e选项,后续要开启时再执行 set -e
command1 || exit 1 命令1失败后退出,默认情况下失败后继续执行下面的语句
command1 && command2 命令1成功后执行命令2
使用方式1.
脚本开头添加 set -euxo pipefail
使用方式2.
bash -euxo pipefail script.sh
# 脚本模式
(
set -e
main
)
value=$?
if [ $value != 0 ]
then
(
set -e
catch
)
fi
(
set -e
finally
)
exit $value
# 判断file存在并且有内容
if test -s file; then
git
# 子模块更新
if [ -f .gitmodules ] && [ ! -f .ignoresubmodule ]; then
git submodule update --init --recursive
fi
# 最新提交ID
git rev-parse HEAD