1. 脚本格式
#!/bin/bash //#! 幻数 指定脚本用的命令解释器
#加脚本内容
执行脚本的方法:
sh
sh -x
2. 变量
在开始进行定义ip=10.0.0.201
方便脚本里面进行重复使用
1)命名规则
看见变量名称 识别变量作用
不能以数字开头
2)引号
单引号:所见即所得
双引号:可以解析特殊符号 如:`` $() $ !
不加引号:与双引号类似 支持通配符 * {} ? [] [^]
反引号:优先执行 引号里面为命令
定义变量时 变量中有空格 必须用引号
3)变量分类
(1)局部变量(普通变量)
IP=10.0.0.200
time=2019-5-30
取变量内容
echo $weekday echo ${week}day
例1:局部变量 定义与使用:
[root@m01 scripts]# date=7
[root@m01 scripts]# echo $dateday
[root@m01 scripts]# echo $(date)day
Thu May 30 09:01:11 CST 2019day
[root@m01 scripts]# echo ${date}day
7day
(2)全局变量(环境变量)
- 特点
系统创建
大部分地方 意思相同
大写 - 常用
PATH
PS1
LANG
- 创建
export 加定义的变量
- 取消变量(删除)
unset +变量名
(3)局部变量 VS 全局变量
source
(4)特殊变量
$?
上一条命令的返回值
0 正确
非0 有问题
$数字
$1 $3
$0
$#
命令行参数的个数
判断参数的个数
$*
脚本的所有参数
例2:$1 $2 $3 $0的用法:
[root@m01 scripts]# cat show.sh
#!/bin/bash
echo $1 $2 $3 $0
[root@m01 scripts]# echo show.sh oldboy lidao oldgirl alex
show.sh oldboy lidao oldgirl alex
例3:变量的应用
[root@m01 /server/scripts]# x=10
[root@m01 /server/scripts]# y=99
[root@m01 /server/scripts]# awk 'BEGIN{print $x/$y}'
awk: cmd. line:1: fatal: division by zero attempted
[root@m01 /server/scripts]# awk 'BEGIN{print x,y}'
[root@m01 /server/scripts]# awk -vn1=10 -vn2=99 'BEGIN{print n1/n2}'
0.10101
[root@m01 /server/scripts]# awk -vn1=$x -vn2=$y 'BEGIN{print n1/n2}'
0.10101
3. 判断
(1)特殊符号
&& 前一个命令执行成功 执行后面的命令
|| 前一个命令没有执行成功 执行后面的命令
(2)[] 条件表达式
括号内两个空格
文件目录
[ -d /tmp/old ]
判断目录是否存在
-f 文件
比大小
单词
-eq ==
equal 等于
-ne !=
not equal 不等于
-gt >
great than
-ge >=
great equal
-lt <
less than 小于
-le <=
less equal
(3)if条件 判断
简单格式
例4:if条件语句:
[root@m01 scripts]# cat cal_v1.sh
#!/bin/bash
x=$1
y=$2
if [ $# -lt 2 ];then
echo "Usage: sh $0 num1 num2"
else
awk -vn1=$x -vn2=$y 'BEGIN{print n1+n2}'
awk -vn1=$x -vn2=$y 'BEGIN{print n1-n2}'
awk -vn1=$x -vn2=$y 'BEGIN{print n1*n2}'
awk -vn1=$x -vn2=$y 'BEGIN{print n1/n2}'
fi
[root@m01 scripts]# sh cal_v1.sh 3
Usage: sh cal_v1.sh num1 num2
[root@m01 scripts]# sh cal_v1.sh 3 4
7
-1
12
0.75
(4)for循环
(5)生产案例 :需求
判断定时任务是否运行中
例:查看定时任务是否运行中
[root@m01 scripts]# cat cron.sh
#!/bin/bash
count=$(ps -ef |grep -c crond )
if [ $count -ge 2 ];then
echo 'crond running'
else
echo 'crond stop'
fi
[root@m01 scripts]# systemctl stop crond
[root@m01 scripts]# sh cron.sh
crond stop
[root@m01 scripts]# systemctl start crond
[root@m01 scripts]# sh cron.sh
crond running