以例子学习shell:
1、镜像版本发布脚本
(1、shell环境:
#!指定shell脚本的解析器
(2、第一个shell脚本:
vi build.sh
chmod +x ./build.sh #使脚本具有执行权限
./build.sh #执行脚本
(3、变量:赋值与使用:
直接赋值:your_name="wqd"
语句赋值:for file in `ls /etc` # 将/etc 下目录的文件名循环出来。
变量可以重复赋值。新的覆盖旧的
使用变量: echo ${your_name} #花括号帮助解释器识别变量边界。建议一直加养成好的习惯。
只读变量: readonly your_name
删除变量: unset your_name
(4、字符串:
单引号:
单引号里的任何字符都会原样输出,单引号字符串中的变量是无效的
单引号字串中不能出现单引号(对单引号使用转义符后也不行)。
双引号: 单引号不能的,他能。
拼接字符串:
greeting_1="hello, ${your_name} !"
获取字符串长度:
string="abcd"
echo ${#string} #输出 4
(5、数组:
array_name=(value0 value1 value2 value3)
array_name[0]=value0
length=${#array_name[*]}
(6、执行脚本的时候。可以像脚本内传递参数。
脚本内接收参数的格式为:
$0 表示执行的文件名
$n 第n个参数。
增加可执行权限:chmod +x build.sh
【`】,学名叫“倒引号”, 如果被“倒引号”括起来, 表示里面需要执行的是命令。
比如 `dirname $0`, 就表示需要执行 dirname $0 这个命令
【“”】 , 被双引号括起来的内容, 里面 出现 $ (美元号: 表示取变量名) `(倒引号: 表示执行命令) (转义号: 表示转义), 其余的才表示字符串。
【’‘】, 被单引号括起来的内容, 里面所有的都表示串, 包括上面所说的 三个特殊字符。
在命令行状态下单纯执行 $ cd `dirname $0` 是毫无意义的。因为他返回当前路径的"."。
这个命令写在脚本文件里才有作用,他返回这个脚本文件放置的目录,并可以根据这个目录来定位所要运行程序的相对位置(绝对位置除外)。
vi build.sh
#!/bin/bash
# 当前目录
cd `dirname $0`
CDIR=`pwd`
git pull
#拉取分支内容
version="$1" # 如果自定义版本号。将器传入进来。
if [ -z "$version" ]; then #判断是否是自定义的版本号。不是的话。就日期使用当前系统日期。
version=`date +%Y%m%d%H%M%S`
fi
mvn clean install -Dmaven.test.skip=true #打包项目
docker build -t docker.demo.com/store/demo:1.0_$version . #build 镜像
docker push docker.demo..com/store/demo:1.0_$version #push镜像到仓库