以下内容仅为编写脚本时所用到的linux\shell\git内容的总结,并非全面总结。
-
shell文件头:(#! 符号标记,脚本需要什么解释器来执行,即使用哪一种 Shell)
如:#!/usr/bin/env sh
常用的shell如下:
Bourne Shell(/usr/bin/sh或/bin/sh)
Bourne Again Shell(/bin/bash)
C Shell(/usr/bin/csh)
K Shell(/usr/bin/ksh)
Shell for Root(/sbin/sh)
…… -
自动化部署流程:切换到项目主目录(cd …)->找到项目进程id,kill -9 pid->git checkout 版本号->git pull ->配置文件检查->启动进程,代码如下(非标准流程):
defcd(){
#切换到项目主目录
cd ${path}
pwd
#输入分支版本
read -t 30 -p “请输入需要checkout的版本号,输入后直接点击回车键:” branch_master
#切换到指定分支
git checkout ${branch_master}
#删除原有日志内容 或清空
cat /dev/null > giterror.txt
#rm -rf giterror.txt
rm -rf pull.txt
#更新
echo “开始更新”
check=“git pull”
${check} >pull.txt
key=“Please commit your changes or stash them before you merge”
#查找报错日志
grep -s KaTeX parse error: Expected 'EOF', got '#' at position 32: … giterror.txt #̲判断更新是否报错 if [ …{branch_master}
git pull
echo “本地存在修改,先撤销本地修改”
else
echo “本地无修改,已经更新成功”
fi
#比较程序配置文件
rm -rf diffrent.txt
file2_bk="…/config.json_bk"
diff config.json $file2_bk > diffrent.txt
if [ -s “diffrent.txt” ]; then
\cp ${file2_bk} config.json
echo “mysql.json文件已替换成功”
else
echo “mysql.json文件无需替换”
fi
#项目名称
process_name=“iqidao”
killall KaTeX parse error: Expected 'EOF', got '#' at position 21: …ess_name} #̲获取项目进程号 pi…(ps -ef | grep iqidao | grep -v grep | awk ‘{print $2}’)
echo p i d n o i f [ − z " {pid_no} if [ -z " pidnoif[−z"{pid_no}" ]
then
echo “进程已经被kill”
else
kill -9 KaTeX parse error: Expected 'EOF', got '#' at position 51: …-9命令" fi #̲编译 echo "开始编译"…(ps -ef | grep iqidao | grep -v grep | awk ‘{print $2}’)
echo p i d n o r e b o t i f [ − z " {pid_no_rebot} if [ -z " pidnorebotif[−z"pid_no_rebot" ]
then
echo “进程启动失败,请检查错误”
else
echo “进程成功启动”
fi
}
defcd -
涉及的shell总结:
- [变量 ]
a.定义变量:var_value=“Hello”
b.引用变量: v a r v a l u e 或 var_value或 varvalue或{var_value} - [ 获取键盘输入] read -p(提示语句) -n(字符个数) -t(等待时间) -s(不回显)
a. -t 30 :即等待30s时间,若不输入则退出输入
b.-s 输入内容时不显示在监视器上,输入完毕后回显在监视器上。 - [算数运算符 ]加减乘除 、取余、等于不等于
a. val=expr $a + $b
b. val=expr $a - $b
c. val=expr $a \* $b
d. val=expr $a / $b
e.val=expr $a % $b
f.[ $a == $b ]
h.[ $a != $b] - [ 字符串运算符] 判断变量
a. -z 判断 变量的值,是否为空 ,为空返回True
b. -n 判断变量的值是否为空,为空返回False
格式:[ -z “$var_value” ] - [ 运算符]文件判断
a.[ -s file ] 判断文件是否为空,不为空返回True
b.[-e file ] 判断文件是否存在,存在返回True - [流程控制 ] if 语句,切记内容与[]之间一定要有空格,否则会报错
if [condition]
then
command1
echo “*********”
else
command2
echo “$$$$$$$$”
fi - [ 输出]
a.echo “***”
b.printf “$$$$”
- 涉及的linux命令总结
a.cd path 切换到指定目录
b.rm 删除文件
强制删除:-f
给出提示:-i
删除目录下的所有文件:-r
强制删除/home下所有文件:rm -rf /home
c.grep
找出内容且输出行号:-n
查找内容不区分大小写:-i
找出/home/log文件下所有关于tomcat的内容且输出行号:grep -ni tomcat/home/log
d.diff:比较文件差异
diff $file2 $file2_bk
e.ps 查看j进程
显示终端上所有进程:a
显示所有进程及其路径:-e
显示正在运行进程:-r
全格式显示:-f
查看所有名为process进程及其详细路径:ps -ef |grep process
f.kill-杀掉进程
强制执行:kill -9 pid
killall process = ps aux |grep 进程名+kill -9
pkill process
h.cp 复制文件
直接覆盖重名文件不给出提示:-f
给出重复提示:-i
复制目录及所有文件:-r
文件操作权限一同复制:-p
强制复制:\cp
将/home/a文件夹下的所有文件强制复制至/usr/local下,且文件操作权限不变:cp -rfp /home/a /usr/local
i.删除文件内容
(1) : > filen
(2)> file
(3)echo “” > file
(4)echo > file
(5)cat /dev/null > file - 涉及的git内容总结
a.git tag–查看所有版本
b.git checkout +版本号–切换到当前版本
c.git pull origin 版本 --更新;git pull默认更新当前分支
d.git fetch -all 下载远程内容,不合并本地
e. git reset --hard origin/master Head指向下载的最新版本