平时很少写Shell脚本,主要是它的语法相比Python要难掌握,但做为非专业运维工程师,拼拼凑凑还是要能写一点Shell代码,在处理文件相关任务时还是要方便些。
一、数据库冷备
0 15 * * * sh /bak/bakdb.sh
每天定时将AWS上的RDS dump到一台离线机器,然后导入自已搭建的MySql数据库。
二、Java与Vue项目打包发布
注:
1、考虑到项目相对较少,不想去搭建Jenkins这类集成打包环境,就直接写一个Shell脚本。
2、在脚本中写 rm -rf * 要特别小心,一般要指定删除目录的完整路径,不要先cd到目录,然后执行rm -rf ,这样风险很大,极有可能误删,记得四年前第一次写的时候没注意,一个脚本执行后把脚本自己都干掉了。
这里建议生产环境机器,最好重新定义一下rm,不要直接删除,把数据先挪到回收站。
alias rm=trash
trash()
{
mv $@ ~/.Trash/
}
alias rl='ls ~/.Trash'
alias ur=undelfile
undelfile()
{
mv -i ~/.Trash/$@ ./
}
cleartrash()
{
read -p "Clear trash>[n]" confirm
[ $confirm == 'y' ] || [ $confirm == 'Y' ] && /usr/bin/rm -rf ~/.Trash/*
}
三、例子语法介绍
这个例子是批量创建用户,涉及到遍历文件,条件判断,循环等基本语法。
users.txt
andy
barry
carl
duke
1、循环结构
for
do
.........
done
2、条件语句
if [ ]
then
......
else
......
fi
3、$? 判断上一条命令是否执行成功,0为成功,非0为失败。这个比较容易搞错。
4、赋值语法的=前后不能有空格,这点也需要注意。
5、判断目录是否存在,不存在则创建目录,用Shell脚本处理文件或目录还是比较常见的
DIR="/home/qingcai/test"
if [ ! -e $DIR ]
then
mkdir -p $DIR
fi
-d 测试是否为目录
-e 测试文件或目录是否存在
-f 判断是否是文件