4天
Shell脚本大纲
1.shell介绍
2.shell变量
3.shell 判断语句 if case
4.shell 循环语句 for while
5.shell 函数
6.shell 数组 | awk 数组
git
jenkins
1.Shell课程大纲
2.什么是Shell
3.什么是Shell脚本
4.Shell脚本能做什么
5.shell脚本需要的预备知识
6.shell脚本如何才能学好
7.Shell脚本编写规范、执行方式。
2.什么是shell脚本
1) 将系统命令堆积在一起,顺序执行(简称: 系统命令堆积)
2) 特定的格式 + 特定的语法 + 系统的命令 = 文件。
本章课程内容大纲
1.什么是变量variables?
2.变量命名是否有规范?
3.变量定义的几种方式?
4.变量赋值的方式read?
5.变量删除与替换?
6.变量的整数运算?
需求1:通过位置变量创建 Linux 系统账户及密码,执行 var1.sh username password
useradd 2" | passwd --stdin $1
需求2:通过位置变量创建 Linux 系统账户及密码,执行 var1.sh username password,控制最多传递两个参数。
if [ 0 { username and password }"
exit
fi
useradd 2" | passwd --stdin $1
需求3: 如上两个需求,仅能root用户执行,普通用户无法执行.
1.首先判断你的身份是root还是普通用户,如果是root则继续,如果普通用户则退出
if [ $USER != root ];then
echo "Permission denied Please change su - root"
exit
fi
2.判断你输入的参数个数,如果不是2位,则提示错误
if [ 0 { username and password }"
exit
fi
3.正常创建用户
useradd 2" | passwd --stdin $1
需求2:变量string="Bigdata process is Hadoop, Hadoop is open source project",执行脚本后,打印输出string变量,并给出用户以下选项:
1)、打印string长度
2)、删除字符串中所有的Hadoop
3)、替换第一个Hadoop为Linux
4)、替换全部Hadoop为Linux
用户输入数字1|2|3|4,可以执行对应项的功能,输入q|Q则退出交互模式
需求3:查看内存/当前使用状态,如果使用率超过80%则报警发邮件,思路如下:
1.
[] 运算
{} 变量名
1.什么是变量
传递数据的一种方式 固定的名称 ---> 不固定的值
2.变量定义规范
1.命名
2.变量 = 值 之间不能出现空格
3.如何定义变量
1.自定义变量
2.系统环境变量 (系统自带,谁都可用)
3.预先定义好的变量 2
#
@ $*
4.交互式定义变量read
-p: 提示用户的输入信息
-t: 超时时间
-s: 不显示输入的内容(密码类)
-n: 多少个字符
5.变量替换
# 从头到尾匹配,匹配一次
## 从头到尾匹配,贪婪匹配
% 从尾匹配到头,匹配一次
%% 从尾匹配到头,贪婪匹配
// 替换一次
/// 替换多次
6.变量运算 [] expr
7.${#var} #统计变量的字符长度
1.什么是if
条件 起床
真 赚钱
假 扣钱
2.为什么要使用if
判断上一次执行的命令是否成功 如果成功则继续 失败则停止.
3.if基础语法
单条件
if [ 有钱 ];then
造
fi
双条件
if [ 有钱 ];then
造
else
宅
fi
多条件
if [ 有钱 ];then
造
elif [ 人帅 ];then
蹭
elif [ 上班 ];then
赚
else
宅
fi
4.基于文件进行判断
备份
参数 说明 示例
-e 如果文件或目录存在则为真 [ -e file ]
-s 如果文件存在且至少有一个字符则为真 [ -s file ]
-d 如果文件存在且为目录则为真 [ -d file ]
-f 如果文件存在且为普通文件则为真 [ -f file ]
-r 如果文件存在且可读则为真 [ -r file ]
-w 如果文件存在且可写则为真 [ -w file ]
-x 如果文件存在且可执行则为真 [ -x file ]
5.基于整数进行判断
参数 说明 示例
-eq 等于则条件为真 [ 1 -eq 10 ]
-ne 不等于则条件为真 [ 1 -ne 10 ]
-gt 大于则条件为真 [ 1 -gt 10 ]
-lt 小于则条件为真 [ 1 -lt 10 ]
-ge 大于等于则条件为真 [ 1 -ge 10 ]
-le 小于等于则条件为真 [ 1 -le 10 ]
参数 说明 示例 额外解释
== 等于则条件为真 [ "b" ]
!= 不相等则条件为真 [ "b" ]
-z 字符串的长度为零则为真 [ -z "a" ] 有内容则为真
6.基于字符进行判断
7.基于正则进行判断
8.逻辑语句 && ||
需求1:判断一个机器是否存活,能ping通就算存活。
需求2:监控内存小于500M和磁盘容量小于10G,则发邮件报警
1.剩余内存低于500M free -m |awk '/^Mem/ {print / {print $(NF-2)}'
需求3:检测本机当前用户是否为管理员,如果是则使用 yum 安装 vsftpd 如果不是,则提示您非管理员。
if [ $USER == "root" ];then
yum install vsftpd -y
else
echo "你不是管理员"
fi
需求4:根据不同的系统,配置不同的yum源
1.获取相同系统,不同的版本
2.根据不同的系统配置不同yum源
需求5:安装不同版本的PHP方式,使用echo输出即可,不用真的安装。
1.给一个选择的菜单
2.给一个数字编号 1 2 3 4
3.根据用户的选择进行判断
需求6:
1.如果姑娘小于18岁,打印“未成年”
2.如果姑娘大于18岁小于25岁,打印“表白”
3.如果姑娘大于25岁小于45岁,打印“阿姨好”。
4.如果姑娘大于45岁,打印“奶奶好”
需求7:在每月第一天备份并压缩/etc目录的所有内容,存放到/opt/bak目录,存放的形式2019_04_10_etc.tar.gz
1.备份什么 /etc
2.备份到哪 /root/bak
3.备份的方式 tar压缩
4.备份周期 每月1号 crond
需8:提示用户输入年份后判断该年是否为闰年 能整除4, 并且不能被100整除则为 闰年
润年:
1.能整出4 不能被100整除
3.能直接除以400
case
需求1:使用case实现nginx服务启停脚本。
需求2:使用case实现nginx状态监控脚本。
需求3:使用case实现php-fpm状态监控脚本。
需求4:编写脚本,根据用户输入的服务名称查询该服务的状态,如果服务不存在则直接报错。如果服务启动则提示 [重启和停止操作],如果服务没有启动则提示 [启动和取消操作]
if:
1.什么是if
2.if使用场景 ( if无处不在 )
3.if语法
单分支 双分支 多分支
4.if使用例子
5.条件判断
基于文件 -d -f -e 备份
基于字符 = != 字符串比较,需要别人输出字符串确定的
基于整数 -eq -ne -lt -gt -ge -le
基于正则 [[ =~ 正则语句 ]]
case
1.什么是case , 根据条件进行选择, 而选择内容是提前预设定好的
2.case使用场景
1.服务的启动与停止
2.编写菜单栏
3.简单跳板机程序
3.case基本的语法
4.case示例
下周:
for
while
break continue exit
functions
实例: if + case + functions + for
网友评论