什么是脚本
我们可以用脚本去安装部署、备份、统计、巡检,检查cpu,磁盘等等一些服务状态。让工作更快,更高效,不容易出错
脚本大概模块
#!/bin/bash 声明解释器
# 安装httpd
yum -y install $httpd
# 启动httpd
systemctl start $httpd
变量
用户变量
作用是在当前的脚本范围去应用
用户可以自定义的变量
变量取名范围大小写字母、数字‘下划线、不能用数字开头
一个具有注脚的文本。变量名区分大小写
引用变量可以
name=Jack
echo $name
//通过交互来定义变量
#!/bin/bash
read -ep "你叫什么名字:" name
echo "hello $name!"
这里要注意引号,例如:
’ ’ 内部不可引用变量
" " 内部可以使用变量
`` 会将括起来的内容当成命令执行
$() 会将括起来的内容当成命令执行
环境变量
作用是全局的
环境变量永久生效 和 临时生效
临时生效例如:
[root@localhost ~]# export name=jack
[root@localhost ~]# echo $name
jack
环境临时定义关机重启或者主页刷新,定义的变量就会消失
环境变量永久生效例如:
vim /etc/profile
进入到这个目录下定义
export name=xiaobai
就是环境永久定义变量
[root@localhost ~]# vim /etc/profile
[root@localhost ~]# source /etc/profile
[root@localhost ~]# echo $name
xiaobai
永久环境变量定义
关机重启和刷新变量都不会消失
系统变量(谨慎使用)
$HOSTNAME
$HOME
$USER
$SHELL
$PATH 默认搜索命令的目录列表
…
**特殊变量:**
$0 脚本的文件名
$$ 脚本产生的PID
$1 $2..$n 脚本的参数
$# 脚本接收到的参数的个数
$@ 获取脚本的所有参数
$* 获取脚本的所有参数
$? 上一条命令的返回值,为0时则是命令执行成功
数组
定义一个数组,名字为name
name=(xiaobai lucy jack)
可通过数组的索引来应用元素
echo ${name[0]}
xaiobai
echo ${name[1]}
lucy
也可以更改数组中的某个函数值
name[2]=tom
打印数组中所有的元素
echo ${name[@]} 或者 echo ${name[*]}
打印出数组的元素个数(使用循环时很有用)
echo ${#name[@]} 或者 echo ${#name[*]}
判断
什么是判断?
流程控制
对某些值进行判断比如端口等等
使用命令成功了吗,文件存在吗,有内容吗,端口监听了吗等等…
if 条件表达
if [ 1 -gt 2 ];then
echo '123'
else
echo '234'
fi
整数判断
条件表达式: 整数的比较
-gt 大于
-ge 大于等于
-eq 等于
-le 小于等于
-lt 小于
-ne 不等于
逻辑判断
逻辑判断: 与或非
-a 并且
-o 或者
&& 并且
|| 或者
! 非
例如:
监听80端口是否在监听监测
#!/bin/bash
port=$1
port_num=$(netstat -ntlp |grep 80|wc -l)
if [ $port_num -eq 0 ];then
echo "没有监听"
else
echo "正在监听"
fi
文件类型的判断
-e 文件存在为真
-f 是普通文件为真
-d 是目录为真
-L 是链接文件为真
-z 字符串长度为0为真
-n 字符串长度不为0为真
[ -e /tmp/a.txt ]
[ -f /tmp/a.txt ]
[ -d /tmp ]
[ ! -d /opt/1.txt ]
[ -d /opt/wg ] || mkdir -p /opt/wg
[ -z $name ] 变量值为空为真
-------------------------------------
前四个判断文件目录是否为真,后两个判断字符串