文章目录
- Linux系统中sh脚本编写
- 1.在编写sh脚本前了解一下基本语法
- 1.1 if语句
- 单分支
- 双分支
- 多分枝
- 1.2 for语法
- 2. 自己写的demo :自动部署前端项目 (自动拉取代码,打包,部署nginx)
- 3.定时执行 shell脚本
Linux系统中sh脚本编写
我们在使用linux系统开发的过程中,经常会遇到一些重复的操作,想copy, push等等。这个时候我们就可以自己编写一个sh脚本,使用sh脚本操作这些重复的动作。直接 sh xx.sh脚本执行命令即可
#!/bin/sh 和 #!/bin/bash 都是脚本文件的开头,用来指定脚本文件的解释器。其中 #!/bin/sh 指定的是 Bourne shell 解释器,而 #!/bin/bash 指定的是 Bash shell 解释器。
Bash shell 是 Bourne shell 的增强版,它支持更多的特性和语法。因此,如果脚本中需要使用 Bash shell 特有的语法或特性,就需要使用 #!/bin/bash 来指定解释器。
1.在编写sh脚本前了解一下基本语法
1.1 if语句
这里注意:
-x:判断 文件夹 是否存在并且是否具有可执行权限
-f: 判断 判断$myPath是否存在
-d:判断 文件夹 是否存在
-n:判断一个变量是否有值
#!/bin/sh
myPath="/var/log/httpd/"
myFile="/var/log/httpd/access.log"
# -x 判断$myPath是否存在并且是否具有可执行权限
if [ -x "$myPath" ];then#mkdir "$myPath"echo $myPath
fi# -d 判断$myPath是否存在
if [ -d "$myPath" ];then#mkdir "$myPath"
echo $myPath
fi# -f 判断$myFile是否存在
if [ -f "$myFile" ];then#touch "$myFile"
echo $myFile
fi# -n 判断一个变量是否有值
if [ -n "$myVar" ];thenecho $myVar "is empty"exit 0
fi# 判断两个变量是否相等
if [ "$var1" = "$var2" ];thenecho "$var1 eq $var2"
else echo "$var1 not eq $var2"
fi
if判断分为三个类型:单分支、双分支、多分支。
单分支
[root@bigData01 test]# cat if.sh
#!/bin/bash
read a
read b
if (( $a == $b ))
thenecho "a和b相等"
fi
[root@bigData01 test]# bash if.sh
12
12
a和b相等
双分支
[root@bigData01 test]# cat if.sh
#!/bin/bash
read a
read b
if (( $a == $b ))
thenecho "a和b相等"
elseecho "a和b不相等,输入错误"
fi
[root@bigData01 test]# bash if.sh
12
13
a和b不相等,输入错误
多分枝
[root@bigData01 test]# cat if.sh
#!/bin/bash
printf "Input integer number: "
read num
if ((num==1)); thenecho "Monday"
elif ((num==2)); thenecho "Tuesday"
elif ((num==3)); thenecho "Wednesday"
elif ((num==4)); thenecho "Thursday"
elif ((num==5)); thenecho "Friday"
elif ((num==6)); thenecho "Saturday"
elif ((num==7)); thenecho "Sunday"
elseecho "error"
fi
[root@bigData01 test]# bash if.sh
Input integer number: 5
Friday
1.2 for语法
#!/bin/bashfor ((i =1;i<=5;i++));
dosleep 1echo $i
done
2. 自己写的demo :自动部署前端项目 (自动拉取代码,打包,部署nginx)
#!/bin/bashcd /root/workspace/jianda
echo "***********拉取代码"
git pull origin gw
echo "***********打包"
npm run buildecho "***********拷贝新的安装包"
if [ -d "./jianda" ];thenecho "jianda文件夹存在"rm -r jianda
elseecho "文件不存在,不用删除了"
fimv dist jianda
cp -r src/assets/images/loading/* jianda/assets
rm -r /var/www/jianda
cp -r jianda /var/wwwecho "拷贝成功"nginx -s reload
echo “nginx -s reload success”