shell编程100例及代码注释——持续更新
1、编写hello world脚本
#!/bin/bash echo "Hello World!"
2、通过位置变量创建 Linux 系统账户及密码
#!/bin/bash useradd "$1" echo "$2" | passwd ‐‐stdin "$1"
#$1 是传给脚本的第一个参数,$2 是传给脚本的第二个参数
# 命名为test.sh,保存退出,调用:
# bash Test.sh yln 123
# 创建了名为yln,密码为123的账户
# bash Test.sh yln 123
# 创建了名为yln,密码为123的账户
3、备份日志
# 每周 5 使用 tar 命令备份/var/log 下的所有日志文件
# 编写备份脚本,备份后的文件名包含日期标签,防止后面的备份将前面的备份数据覆盖
#!/bin/bash # vim /root/logbak.sh tar -czf log-`date +%Y%m%d`.tar.gz /var/log
# date使用反引号括起来,反引号表示引号内部的字符作为命令执行,+%Y%m%d限定了date的格式是年月日,反引号在键盘<tab>键上面
# 脚本调用:
# crontab ‐e是指系统在某个时间执行的特定的命令或程序,后面的五个数字位是任务执行设置,分别代表分钟,小时,日,月,星期几调用logbak.sh
crontab ‐e 00 03 * * 5 /root/logbak.sh
4、一键部署 LNMP(RPM 包版本)
# LNMP是Linux + nginx + mysql + PHP,
# 编译安装需要输入大量的命令,如果是配置生产环境需要耗费大量的时间。
# 搭建好LNMP环境之后就无需一个一个的输入命令,无需值守,编译安装优化编译参数,
# 提高性能,解决不必要的软件间依赖,特别针对配置自动优化。
# LNMP是Linux + nginx + mysql + PHP,
# 编译安装需要输入大量的命令,如果是配置生产环境需要耗费大量的时间。
# 搭建好LNMP环境之后就无需一个一个的输入命令,无需值守,编译安装优化编译参数,
# 提高性能,解决不必要的软件间依赖,特别针对配置自动优化。
# 一键部署 LNMP(RPM 包版本)
# 使用 yum 安装部署 LNMP,需要提前配置好 yum 源,否则该脚本会失败
# 本脚本使用于 centos7.2 或 RHEL7.2
# 使用 yum 安装部署 LNMP,需要提前配置好 yum 源,否则该脚本会失败
# 本脚本使用于 centos7.2 或 RHEL7.2
#!/bin/bash yum ‐y install httpd # httpd(网页伺服器)实际上是Apache,它快速、可靠并且可通过简单的API扩展,将Perl/Python等解释器编译到服务器中。 yum ‐y install mariadb mariadb‐devel mariadb‐server # mariadbMariaDB数据库管理系统是MySQL的替代,主要由开源社区在维护, # 采用GPL授权许可 MariaDB的目的是完全兼容MySQL,包括API和命令行,使之能轻松成为MySQL的代替品。 yum ‐y install php php‐mysql # php‐mysql是搭配服用的:免费的 MySQL 数据库通常是通过 PHP 来使用的 systemctl start httpd mariadb # linux系统启动服务:启动httpd mariadb systemctl enable httpd mariadb # linux系统设置开机自启动
5、监控内存和磁盘容量,小于给定值时报警
# 实时监控本机内存和硬盘剩余空间,剩余内存小于500M、根分区剩余空间小于1000M时,发送报警邮件给root管理员
# 提取根分区剩余空间(/)
# df:显示磁盘分区上的可使用的磁盘空间,/代表linux根目录,linux所有目录都由它衍生出来
# awk:后面接条件+{动作},这里是按分隔符分割管道命令左边的域,然后打印第4个域,\/等价于下面的Mem
# 提取内存剩余空间
# free:用来查看可用内存,有两行物理内存:Mem,交换内存:swap,这里是提取第一行第四列
# 注意内存和磁盘提取的空间大小都是以 Kb 为单位
# if后面方括号写明条件,如果条件为真,执行then后面的命令
# -le:shell中大于,大于等于,小于等于,lt,gt,ne,ge,le
# -a: shell的if有-a至-z的参数,-a file,代表:如果file存在则为真
# -s: 邮件主题,root:收件人,<<EOF.....是邮件内容
# df:显示磁盘分区上的可使用的磁盘空间,/代表linux根目录,linux所有目录都由它衍生出来
# awk:后面接条件+{动作},这里是按分隔符分割管道命令左边的域,然后打印第4个域,\/等价于下面的Mem
# 提取内存剩余空间
# free:用来查看可用内存,有两行物理内存:Mem,交换内存:swap,这里是提取第一行第四列
# 注意内存和磁盘提取的空间大小都是以 Kb 为单位
# if后面方括号写明条件,如果条件为真,执行then后面的命令
# -le:shell中大于,大于等于,小于等于,lt,gt,ne,ge,le
# -a: shell的if有-a至-z的参数,-a file,代表:如果file存在则为真
# -s: 邮件主题,root:收件人,<<EOF.....是邮件内容
#!/bin/bash disk_size=$(df / | awk '/\//{print $4}') mem_size=$(free | awk '/Mem/{print $4}') while : do if [ $disk_size -le 512000 -a $mem_size -le 1024000 ] then mail ‐s "Warning" root <<EOF Insufficient resources,资源不足 EOF fi done
May we all proceed with wisdom and grace.
https://www.cnblogs.com/YlnChen/