序言
一个业务复杂,结构复杂的项目需要自动化部署.以此为基础梳理下使用jenkins自动化部署的过程.
Shell
shell脚本就是一些命令的集合。举个例子,我想实现这样的操作:
- 进入到/tmp/目录;
- 列出当前目录中所有的文件名;
- 把所有当前的文件拷贝到/root/目录下;
- 删除当前目录下所有的文件。
简单的4步在shell窗口中需要你敲4次命令,按4次回车。这样是不是很麻烦?当然这4步操作非常简单,如果是更加复杂的命令设置需要几十次操作呢?那样的话一次一次敲键盘会很麻烦。所以不妨把所有的操作都记录到一个文档中,然后去调用文档中的命令,这样一步操作就可以完成。其实这个文档呢就是shell脚本了,只是这个shell脚本有它特殊的格式。
有一个问题需要约定一下,凡是自定义的脚本建议放到/usr/local/sbin/目录下,这样做的目的是,一来可以更好的管理文档;二来以后接管你的管理员都知道自定义脚本放在哪里,方便维护[email protected]。
【shell脚本的基本结构以及如何执行】
Shell脚本通常都是以.sh 为后缀名的,这个并不是说不带.sh这个脚本就不能执行,只是大家的一个习惯而已。所以,以后你发现了.sh为后缀的文件那么它一定会是一个shell脚本了。
test.sh中第一行一定是 “#! /bin/bash” 它代表的意思是,该文件使用的是bash语法。如果不设置该行,那么你的shell脚本就不能被执行。
第三行和第四行的’#’表示注释,在前面讲过的。
Shell脚本的执行很简单,直接”sh filename “ (因为是通过vi创建的一个文件,没有执行权限所以需要借助sh 命令+ 文件名的方式.如果./filename.sh 的方式调用 则需要增加执行权限命令: chmod +x filename.sh [email protected]) .
另外使用sh命令去执行一个shell脚本的时候是可以加-x选项来查看这个脚本执行过程的,这样有利于我们调试这个脚本哪里出了问题。
Shell的date使用
上面的Shell脚本中用到了’date’这个命令,它的作用就是用来打印当前系统的时间。使用方法如下所示.
#%Y表示年,%m表示月,%d表示日期,%H表示小时,%M表示分钟,%S表示秒
[root@localhost [email protected]]# date "+%Y%m%d %H:%M:%S"
20200617 12:17:33
#这里的是小y 故此值有年份的后两位
[root@localhost [email protected]]# date "+%y%m%d %H:%M:%S"
200617 12:19:37
#-d 选项也是经常要用到的,它可以打印n天前或者n天后的日期,当然也可以打印n个月/年前或者后的日期。
#-d 的用法通俗易懂
[root@localhost [email protected]]# date -d "-1 day" "+%y%m%d %H:%M:%S"
200616 12:20:58
[root@localhost [email protected]]# date -d "+1 day" "+%y%m%d %H:%M:%S"
200618 12:21:05
[root@localhost [email protected]]# date -d "+1 month" "+%y%m%d %H:%M:%S"
200717 12:21:12
[root@localhost [email protected]]# date -d "+1 year" "+%y%m%d %H:%M:%S"
210617 12:21:19
#显示星期几
[root@localhost [email protected]]# date "+%w"
3
Shell变量
定义变量的格式为 “变量名=变量的值”。当在脚本中引用变量时需要加上’$’符号;
#! /bin/bash
#this my first shell script
#[email protected]
date
echo "hello world"
# 表达式使用了 反引号注意 就是d=的后面,[email protected]
d=`date +%w`
echo "the script begin at $d"
# 数学计算要用’[ ]’括起来并且外头要带一个’$’
echo "hello world"
# 表达式使用了 反引号注意 就是d=的后面,[email protected]
d=`date +%w`
echo "the script begin at $d"
# 数学计算要用’[ ]’括起来并且外头要带一个’$’
a=1
b=2
sum=$[$a+$b]
echo "result is $sum"
# 获取标准输入获得变量的值
# read x表示x变量的值需要用户通过键盘输入得到
echo "please input a number"
read x
echo "please input another number"
read y
sum=$[$x+$y];
echo "result is $sum"
#也有一种简洁的写法
#read -p 选项类似echo的作用。执行如下:
#read -p "please input a number:" x
echo $0 $1 $2
你有没有用过这样的命令”/etc/init.d/iptables restart “ 前面的/etc/init.d/iptables 文件其实就是一个shell脚本,为什么后面可以跟一个”restart”? 这里就涉及到了shell脚本的预设变量。实际上,shell脚本在执行的时候后边是可以跟变量的,而且还可以跟多个。
./test.sh 1 2
其中$1的值就是在执行的时候输入的1,而$2的值就是执行的时候输入的2,当然一个shell脚本的预设变量是没有限制的,这回你明白了吧。另外还有一个$0,不过它代表的是脚本本身的名字。不妨把脚本修改一下。
shell的逻辑判断
if的使用不带else
格式为:
- if 判断语句; then
- command
- fi
read -p "please input you score: " a
#在if1.sh中出现了 ((a<60))这样的形式,这是shell脚本中特有的格式,用一个小括号或者不用都会报错,请记住这个格式,即可
if ((a <60)); then
echo "you didn't pass the exam."
fi
if带else
格式为:
- if 判断语句 ; then
- command
- else
- command
- fi
read -p "please input you score: " a
#在if1.sh中出现了 ((a<60))这样的形式,这是shell脚本中特有的格式,用一个小括号或者不用都会报错,请记住这个格式,即可
if ((a <60)); then
echo "you didn't pass the exam."
else
echo "you pass the exam"
fi
if带elif(elif 相当于else if)
格式为
- if 判断语句一 ; then
- command
- elif 判断语句二; then
- command
- else
- command
- fi
read -p "please input you score: " a
#在if1.sh中出现了 ((a<60))这样的形式,这是shell脚本中特有的格式,用一个小括号或者不用都会报错,请记住这个格式,即可
if ((a <60)); then
echo "you didn't pass the exam."
#这里的 && 表示“并且”的意思,当然你也可以使用 || 表示“或者”,执行结果:
elif((a.60)) && ((a<85)); then
echo "you didn't get a high score"
else
echo "you pass the exam"
fi
其它逻辑运算符
以上只是简单的介绍了if语句的结构。在判断数值大小除了可以用”(( ))”的形式外,还可以使用”[ ]”。但是就不能使用>, < , = 这样的符号了,要使用 -lt (小于),-gt (大于),-le (小于等于),-ge (大于等于),-eq (等于),-ne (不等于)。
文件目录判断
格式
- if [ -e filename ] ; then
可选参数:
- -e :判断文件或目录是否存在
- -d :判断是不是目录,并是否存在
- -f :判断是否是普通文件,并存在
- -r :判断文档是否有读权限
- -w :判断是否有写权限
- -x :判断是否可执行
case的使用
格式为:下面的结构中,不限制value的个数,*则代表除了上面的value外的其他值。
- case 变量 in
- value1)
- command
- ;;
- value2)
- command
- ;;
- value3)
- command
- ;;
- *)
- command
- ;;
- esac
Shell循环
for循环
格式:
- for 变量名 in 循环的条件; do
- command
- done
有如下的2种写法.大同小异.同时也可以试:,(in 后面其实就可以跟一些linux命令,然后接受该命令返回的内容,并循环展示它[email protected])------------另外注意in后面的是反引号,
- for i in `ls`; do echo $i; done
- for i in `cat test.txt`; do echo $i; done
while循环
格式:
- while 条件; do
- command
- done
去掉条件就是死循环如下所示,可以监听端口或者输入
- while :; do
- command
- done
shell函数
在shell脚本中,函数一定要写在最前面,不能出现在中间或者最后,因为函数是要被调用的,如果还没有出现就被调用,肯定是会出错的。
函数格式:
- function 函数名() {
- command
- }
Jenkins配置Git
待续~~~~~~~~