一个业务复杂,结构复杂的项目需要自动化部署.以此为基础梳理下使用shell语法
Shellshell脚本就是一些命令的集合。举个例子,我想实现这样的操作:
- 进入到/tmp/目录;
- 列出当前目录中所有的文件名;
- 把所有当前的文件拷贝到/root/目录下;
- 删除当前目录下所有的文件。
简单的4步在shell窗口中需要你敲4次命令,按4次回车。这样是不是很麻烦?当然这4步操作非常简单,如果是更加复杂的命令设置需要几十次操作呢?那样的话一次一次敲键盘会很麻烦。所以不妨把所有的操作都记录到一个文档中,然后去调用文档中的命令,这样一步操作就可以完成。其实这个文档呢就是shell脚本了,只是这个shell脚本有它特殊的格式。
有一个问题需要约定一下,凡是自定义的脚本建议放到/usr/local/sbin/目录下,这样做的目的是,一来可以更好的管理文档;二来以后接管你的管理员都知道自定义脚本放在哪里,方便维护cuiyaonan2000@163.com。
【shell脚本的基本结构以及如何执行】
Shell脚本通常都是以.sh 为后缀名的,这个并不是说不带.sh这个脚本就不能执行,只是大家的一个习惯而已。所以,以后你发现了.sh为后缀的文件那么它一定会是一个shell脚本了。
test.sh中第一行一定是 “#! /bin/bash” 它代表的意思是,该文件使用的是bash语法。如果不设置该行,那么你的shell脚本就不能被执行。
第三行和第四行的’#’表示注释,在前面讲过的。
Shell脚本的执行很简单,直接”sh filename “ (因为是通过vi创建的一个文件,没有执行权限所以需要借助sh 命令+ 文件名的方式.如果./filename.sh 的方式调用 则需要增加执行权限命令: chmod +x filename.sh cuiyaonan2000@163.com) .
另外使用sh命令去执行一个shell脚本的时候是可以加-x选项来查看这个脚本执行过程的,这样有利于我们调试这个脚本哪里出了问题。
上面的Shell脚本中用到了’date’这个命令,它的作用就是用来打印当前系统的时间。使用方法如下所示.
#%Y表示年,%m表示月,%d表示日期,%H表示小时,%M表示分钟,%S表示秒
[root@localhost cuiyaonan2000@163.com]# date "+%Y%m%d %H:%M:%S"
20200617 12:17:33
#这里的是小y 故此值有年份的后两位
[root@localhost cuiyaonan2000@163.com]# date "+%y%m%d %H:%M:%S"
200617 12:19:37
#-d 选项也是经常要用到的,它可以打印n天前或者n天后的日期,当然也可以打印n个月/年前或者后的日期。
#-d 的用法通俗易懂
[root@localhost cuiyaonan2000@163.com]# date -d "-1 day" "+%y%m%d %H:%M:%S"
200616 12:20:58
[root@localhost cuiyaonan2000@163.com]# date -d "+1 day" "+%y%m%d %H:%M:%S"
200618 12:21:05
[root@localhost cuiyaonan2000@163.com]# date -d "+1 month" "+%y%m%d %H:%M:%S"
200717 12:21:12
[root@localhost cuiyaonan2000@163.com]# date -d "+1 year" "+%y%m%d %H:%M:%S"
210617 12:21:19
#显示星期几
[root@localhost cuiyaonan2000@163.com]# date "+%w"
3
Shell变量
定义变量的格式为 “变量名=变量的值”。当在脚本中引用变量时需要加上’$’符号;
#! /bin/bash
#this my first shell script
#cuiyaonan2000@163.com
date
echo "hello world"
# 表达式使用了 反引号注意 就是d=的后面,cuiyaonan2000@163.com
d=`date +%w`
echo "the script begin at $d"
#表达式中也可以应用外部变量,如下所示
des="现在的时间是:"
d=`${des} date `
# 数学计算要用’[ ]’括起来并且外头要带一个’$’
echo "hello world"
# 表达式使用了 反引号注意 就是d=的后面,cuiyaonan2000@163.com
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
关注
打赏
最近更新
- 深拷贝和浅拷贝的区别(重点)
- 【Vue】走进Vue框架世界
- 【云服务器】项目部署—搭建网站—vue电商后台管理系统
- 【React介绍】 一文带你深入React
- 【React】React组件实例的三大属性之state,props,refs(你学废了吗)
- 【脚手架VueCLI】从零开始,创建一个VUE项目
- 【React】深入理解React组件生命周期----图文详解(含代码)
- 【React】DOM的Diffing算法是什么?以及DOM中key的作用----经典面试题
- 【React】1_使用React脚手架创建项目步骤--------详解(含项目结构说明)
- 【React】2_如何使用react脚手架写一个简单的页面?