一、shell基本概述
老男孩教育-shell编程-day07.pdf
1.shell介绍
shell是一个命令解释器,主要用于接收用户指令,进入驱动操作系统,或硬件
shell存在交互式和非交互式
①交互式: 登录linux系统,useradd,passwd
②非交互式: 创建100个文件命令 写入一个文件中,然后执行他(不用参与) 一会看到的传参方式设定密码就是非交互式
Shell是一个命令解释器,它在操作系统的最外层,负责直接与用户进行对话,将用户输入的命令翻译给操作系统,并将处理的结果输出至屏幕。
当然hell 令是存在交互式、非交互式两种方式。why?
其实是我们日常使用最多的一种模式、登录终端、执行命令、返回结果。再次输入命令、然后等待结果。最后结束工作退出Shell会话。当退出Shell会话后,当前的shell话也就终止了。
那什么又是shell非交互式: 在这种模式下, shell 不与你进行交互, 而是直接读取某个文件进行执行。那文件中都有什么,“其实就是一堆的命令”。当该文件丛头执行到尾,结束后,当前hell也终止了
2.什么是shell即本
*1)将系统命令堆积在一起,顺序执行简称系统命令堆积.
*2)特定的格式+特定的语法+系统的命令二文件.
Ps: shell命令执行时会开启一个子窗口bash,执行完就销毁,不会影响到当前用户的bash窗口
2.什么是shell脚本
1) 将系统命令堆积在?起,顺序执?(简称: 系统命令堆积)
2) 特定的格式 + 特定的语法 + 系统的命令 = ?件( Shell脚本?件)。
3.学习Shell预备知识
1.熟练使⽤vim编辑器 ()
2.熟练使⽤系统基础命令 ( useradd、w、awk、….)
3.熟悉Linux、grep、awk、sed
注意:命令不熟、基本的服务连⼿动搭建都有困难,⼀定学不会Shell。
如何学习Shell脚本
1.基础命令+基础服务+练习题+ ( 思路!!! )
2.能看懂—>照抄着写—>能修改—>能编写—>能优化脚本
思路——> 框架——> 优化
*4.Shell书写⽅式
1.Shell脚本名称必须要有含义 a.sh、b.sh、建议命名的⽅式最好在30个字节以内解决。check_memory.sh
2.shell脚本的格式 (建议在⽂件的⾸⾏添加 #!/bin/bash、#!/usr/bin/bash ,自动生成的格式 配置——->>/etc/vimrc)
3.shell脚本建议添加⼀些个注释
5.Shell执⾏⽅式
添加 #!/bin/bash 的作⽤。
1.不添加
默认 ./运⾏时,系统会调bash来运⾏该脚本。
缺点:如果我写的是python脚本,直接调⽤bash来运⾏则会报错。
2.添加
./运⾏脚本,默认会读取该⽂件第⼀⾏,来确定使⽤什么解释器运⾏。 (必须要有执行权限)
3.直接调⽤解释器运⾏ ( ⽆需在意⽂件⾸⾏指定的解释器 )
python check_shell.sh
bash check_shell.sh #⽇常使⽤最多( 我确定他是⼀个shell脚本,所以我会选
择直接使⽤bash解释器翻译该脚本⽂件 )
**
二, shell编程学习大纲
一、shell基本概述
二、shell自定义variables
三、shell运算符 expr bc
四、shell流程控制 if case
五、shell 循环语句 for while
六、shell 数组函数 array function
七、shell内置命令 break continue exit
**
1. shell编程预备
shell能做什么
1,基础配置: yum源 ssh优化 软件包 创建用户 内核参数 { shell | ansible }
2.配置变更: Nginx PHP Tomcat MysQL { shell | ansible }
3.部署代码: Gitlab Jenkins web集群 { shell | ansible }
4.监控服务: zabbix-server zabbix-agent { shell | ansible }
5·日志分析: pv uv ip {awk} elkstack { shell | ansible }
6. 自动扩容: 监控系统+ 弹性伸缩服务(免费) { shell | python }
7. 自动缩容:
8. 日常备份: shell
三: shell脚本应用:
3.1 弹性扩容 底层实现原理
云产品展示:
弹性扩容图解:
3.2 CDN加速 shell应用
四、shell编程-综合练习
1.网站监测脚本{xxx}
2.使用shell脚本实现跳板机的功能
3.使用shell脚本实现nginx的多版本安装,必须真的实现
1.nginx 1.18版本
2.nginx 1.19版本
在选择1.18时,需要清理环境,确保完整能安装.
在选择1.19时,需要清理环境,确保完整能安装.
4.根据业务需求,现要求开发一个货币兑换的服务系统,具体要求如下: ( Shell的普通数组 )
(1)实现人民币兑换美元的功能
(2)实现美元兑换人民币的功能
(3)实现人民币兑换欧元的功能
货币兑换利率:1美元 = 7.14人民币、1元=0.12欧元
5.使用awk统计Nginx日志 TOP10的IP访问次数
6.使用awk统计当前TCP状态的次数 (netstat -an | awk '{print $NF}' ) <---state 这一列
7.使用shell脚本完成 mysql备份 , 需要每天凌晨 04:00 运行.
0.只能管理员执行
1.加锁
2.判断文件备份成功或失败
3.定时运行.
8.使用Shell编写同步脚本 Rsync
9.使用Shell脚本编写 Sersync 的服务启停脚本 [ start | stop | restart | status (pid) ]
10.使用shell脚本编写批量创建用户, 批量删除用户 [ add | del ]
1.使用函数
add
del
3.用户如果存在不允许创建,也不允许重置密码
4.仅root能执行,执行过程还需要加锁.
3-使用shell脚本实现nginx的多版本安装,必须真的实现
#!/bin/bash
. ./nginx_install.sh
meminfo () {
cat<<-EOF
------------------------
| 1) 安装nginx 1.18版本 |
| ---------------------- |
| 2) 安装nginx 1.19版本 |
| ---------------------- |
| 3) 打印菜单 |
| -----------------------|
| 4) 登出 |
------------------------
EOF
}
meminfo
trap "" HUP INT QUIT TSTP
while true
do
read -p "请输入你要执行的操作 " Num
case $Num in
1)
if [ ! $Num =~ ^[0-9]+$ ];then
continue
fi
nginx_depend_pakeages
download_1_18_5_nginx
install_nginx_pakeage
nginx_status
;;
2)
if [ ! $Num =~ ^[0-9]+$];then
continue
fi
nginx_depend_pakeages
download_1_19_5_nginx
install_nginx_pakeage
nginx_status
;;
3)
clear
meminfo
;;
4)
break
esac
done
4-根据业务需求,现要求开发一个货币兑换的服务系统,具体要求如下: (1)实现人民币兑换美元的功能 (2)实现美元兑换人民币的功能 (3)实现人民币兑换欧元的功能 货币兑换利率:1美元 = 7.14人民币、1元=0.12欧元
#!/usr/bin/bash
your_money=100
service_menu=(人民币转换美元 美元转换人民币 人明币转换欧元)
echo "******欢迎使用货币转换服务系统*******"
for service in ${!service_menu[@]}
do
if [ $service -eq 0 ];then
echo "=============================="
echo "1.欢迎使用 ${service_menu[service]} 服务"
echo "您需要转换的人民币为:$your_money 元"
new_money=$(awk -v your_money=$your_money 'BEGIN{printf "%.2f\n",your_money/7.14}')
echo "兑换成美元为: ${new_money}$"
echo "=============================="
elif [ $service -eq 1 ];then
echo "=============================="
echo "2.欢迎使用 ${service_menu[service]} 服务"
echo "您需要转换的美元为:$your_money 元"
new_money=$(($your_money * 7 ))
echo "兑换成人名币为: ${new_money}元"
echo "=============================="
elif [ $service -eq 2 ];then
echo "=============================="
echo "3.欢迎使用 ${service_menu[service]} 服务"
echo "您需要转换的人民币为:$your_money 元"
new_money=$(awk -v your_money=$your_money 'BEGIN{printf "%.2f\n",your_money*0.12}')
echo "兑换成欧元为: ${new_money}$"
echo "=============================="
fi
done