shell 使用数组及字符串截取
最近代码发布要迁移到 jenkins,需要写一个构建脚本模板提供给研发人员,用python写可能对研发和测试提高了使用门槛,只能用shell了
- 数组
百度了一下发现 shell使用的数组定义是用括号起来的,不同元素之意用空格分开,ex: test.sh arr=('aa' 'bb' 'cc')
执行 sh test.sh的时间老是报这个数组的括号语法错误Syntax error: "(" unexpected
,百度了一下发现是shell的原因
使用 bash test.sh就没有问题了,使用 ${arr[0]} 来取值 - 字符串截取
在 git 仓库里 使用git checkout -f commitid
,结果如下:HEAD is now at 9f212321... test deploy script
目的是想要获取 commit 提交信息的,因为第一次拉代码执行这个命令时,在这行上面还会有其它信息,所以在取最后一行,最后一行 hash(9f212321...) 后面的内容就是我们想的提交信息,使用命令:hash_msg=`git checkout -f ${commit_hash} 2>&1 | tail -1` hash_msg=${hash_msg#*...} echo "Commit message: ${hash_msg}"
使用管理的加上 tail -1 来获取最后一行,如果没有加上 2>&1 这个最后一行是无法赋值给 hash_msg的,具体原因还不明,最后使用
${hash_msg#*...}
来获取信息,# 表示操作符,*...
表示从左到右匹配...
,截取...
后面的字符,参考 https://baijiahao.baidu.com/s?id=160642549...
本作品采用《CC 协议》,转载必须注明作者和本文链接
印象中 POSIX SHELL 标准是不支持数组的,Bash 对数组进行了「有限的」实现,所以需要使用 Bash。
echo "Commit message: $(git log -1 --pretty=%B)"