引言
学习Linux运维免不了与Shell脚本打交道,也许你只是简单的管理服务器软件(平台),也许你要每天与脚本打交道,不管怎样都要能看懂服务器语言。抽象一点,可以把Shell语言理解为服务器能看懂的你也能看懂的“工作计划”,那么跟我一起来对其一下颗粒度吧。
shell定义
Shell 也是一种程序设计语言,它有变量,关键字,各种控制语句,有自己的语法结构,利用shell程序设计语 言可以编写功能很强、代码简短的程序。
Shell是外壳的意思,就是系统的外壳,我们可以通过shell的命令来控制和操作操作系统,比如linux中的shell命令就包括ls、cd、pwd等等,
总结来说shell就是一个命令解释器,他通过接收用户输入的shell命令来启动、停止程序的运行或者对计算机进行控制。
shell的分类和切换
[root@linux-server ~]# cat /etc/shells
/bin/sh
/bin/bash
/sbin/nologin
/usr/bin/sh
/usr/bin/bash
/usr/sbin/nologin
#默认shell: bash shell
#centos中脚本使用的默认shell 为/usr/bin/sh
查看当前正在使用的shell
[root@linux-server ~]# echo $SHELL
/bin/bash
shell的修改
# vim /etc/passwd 编辑登录shell
使用场景
那么了解完基本信息之后,Shell到底能做什么呢?
- 自动化批量系统初始化程序 (update,软件安装,时区设置,安全策略…)—初始化脚本
- 自动化批量软件部署程序 (LAMP,LNMP,Tomcat,LVS,Nginx)—自动化安装脚本
- 应用管理程序 (KVM)—批量创建虚拟机、管理虚拟机。
- 日志分析处理程序(PV, UV, 200, !200,grep/awk)—-akw、sed、grep
- 自动化备份恢复程序(MySQL完全备份/增量 + Crond)—–数据备份恢复脚本
- 自动化信息采集及监控程序(收集系统/应用状态信息,CPU,Mem,Disk,Net,TCP Status,Apache,MySQL)–监控脚本
- 配合Zabbix信息采集(收集系统/应用状态信息,CPU,Mem,Disk,Net,Apache,MySQL)
- 9*9乘法表、俄罗斯方块,打印三角形,打印圣诞树,打印五角星,运行小火车,坦克大战,排序实现
- Shell可以做任何运维的事情(一切取决于业务需求)
shell 和ansible—批量自动化工具–自动化运维–ansible
有趣的实验
了解完shelli奥本的基本信息,我们就来编写第一个脚本程序吧!
/etc/motd`(Message Of The Day)用于在用户登录时显示系统公告或自定义信息,在这里我们可以让内容声称在我们每次登陆的页面上方。
CentOS 默认不支持动态 MOTD(如 Ubuntu 的 /etc/update-motd.d/
),但可通过脚本实现:
- 创建脚本
sudo vi /etc/profile.d/dynamic-motd.sh
写入要显示的内容,如下:
#!/bin/bash
echo "===== 系统状态 ====="
echo "主机名: $(hostname)"
echo "系统时间: $(date)"
echo "负载: $(uptime | awk -F'load average: ' '{print $2}')"
echo "内存: $(free -h | awk '/Mem/{print $3"/"$2}') 使用中"
echo "根分区剩余: $(df -h / | awk 'NR==2{print $4}')"
- 赋予执行权限
sudo chmod +x /etc/profile.d/dynamic-motd.sh
- 用户登录时自动执行脚本
如图所示:
除此之外,你还可以使用更多趣味性的登陆显示,如:
sudo cat > /etc/motd <<EOF
_ooOoo_
o8888888o
88" . "88
(| -_- |)
O\ = /O
____/`---'\____
.' \\| |// \`.
/ \\||| : |||// \\
/ _||||| -:- |||||_ \\
| | \\\ - /'| | |
| \_| \`\`---'// |_/ |
\ .-\__ \`-. -'__/-. /
___\`. .' /--.--\ \`. .'___
."" '< \`.___\_<|>_/___.' _> \"".
| | : \`- \`. ;\`. _/; .'/ / .' ; |
\ \ \`-. \_\_`. _.'_/_/ -' _.' /
======\`-.____\`-.___\_____/___.-`____.-'======
\`=---='
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
佛祖保佑 永不宕机
God Bless No Downtime
EOF
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
警告:未经授权的访问将被记录并追究责任!
登录即表示同意《安全使用协议》。
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
- 注意事项
权限和归属问题:/etc/motd
应属于 root:root
,权限为 644
生效时间:修改后立即生效,但已登录的用户需要重新登录才能看到更新。
禁用MOTD:清空文件即可–sudo echo “” > /etc/motd