ecs服务器shell常用脚本练习(三)

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
RDS MySQL Serverless 高可用系列,价值2615元额度,1个月
简介: 【4月更文挑战第2天】shell代码训练(三)

个人积累的一些shell脚本结合书本知识总结,精简学习直接代码,可以复制粘贴直接用

1. 使用expect 工具自动交互密码远程其他主机安装httpd 软件

#!/bin/bash

#删除~/.ssh/known_hosts 后,ssh 远程任何主机都会询问是否确认要连接该主机

rm ‐rf ~/.ssh/known_hosts

expect <<EOF

spawn ssh 192.168.4.254

expect "yes/no" {send "yes\r"}

#根据自己的实际情况将密码修改为真实的密码字串

expect "password" {send "密码\r"}

expect "#" {send "yum ‐y install httpd\r"}

expect "#" {send "exit\r"}

EOF

2. 一键部署LNMP(源码安装版本)

menu(){

clear

echo " ##############‐‐‐‐Menu‐‐‐‐##############"

echo "# 1. Install Nginx"

echo "# 2. Install MySQL"

echo "# 3. Install PHP"

echo "# 4. Exit Program"

echo " ########################################"

}

choice(){

read ‐p "Please choice a menu[1‐9]:" select

}

install_nginx(){

id nginx &>/dev/null

if [ $? ‐ne 0 ];then

useradd ‐s /sbin/nologin nginx

fi

if [ ‐f nginx‐1.8.0.tar.gz ];then

tar ‐xf nginx‐1.8.0.tar.gz

cd nginx‐1.8.0

yum ‐y install gcc pcre‐devel openssl‐devel zlib‐devel make

./configure ‐‐prefix=/usr/local/nginx ‐‐with‐http_ssl_module

make

make install

ln ‐s /usr/local/nginx/sbin/nginx /usr/sbin/

cd ..

else

echo "没有Nginx 源码包"

fi

}

install_mysql(){

yum ‐y install gcc gcc‐c++ cmake ncurses‐devel perl

id mysql &>/dev/null

if [ $? ‐ne 0 ];then

useradd ‐s /sbin/nologin mysql

fi

if [ ‐f mysql‐5.6.25.tar.gz ];then

tar ‐xf mysql‐5.6.25.tar.gz

cd mysql‐5.6.25

cmake .

make

make install

/usr/local/mysql/scripts/mysql_install_db ‐‐user=mysql ‐‐datadir=/usr/local/mysql/data/

‐‐basedir=/usr/local/mysql/

chown ‐R root.mysql /usr/local/mysql

chown ‐R mysql /usr/local/mysql/data

/bin/cp ‐f /usr/local/mysql/support‐files/mysql.server /etc/init.d/mysqld

chmod +x /etc/init.d/mysqld

/bin/cp ‐f /usr/local/mysql/support‐files/my‐default.cnf /etc/my.cnf

echo "/usr/local/mysql/lib/" >> /etc/ld.so.conf

ldconfig

echo 'PATH=\$PATH:/usr/local/mysql/bin/' >> /etc/profile

export PATH

else

echo "没有mysql 源码包"

exit

fi

}

install_php(){

#安装php 时没有指定启动哪些模块功能,如果的用户可以根据实际情况自行添加额外功能如‐‐with‐gd 等

yum ‐y install gcc libxml2‐devel

if [ ‐f mhash‐0.9.9.9.tar.gz ];then

tar ‐xf mhash‐0.9.9.9.tar.gz

cd mhash‐0.9.9.9

./configure

make

make install

cd ..

if [ ! ‐f /usr/lib/libmhash.so ];then

ln ‐s /usr/local/lib/libmhash.so /usr/lib/

fi

ldconfig

else

echo "没有mhash 源码包文件"

exit

fi

if [ ‐f libmcrypt‐2.5.8.tar.gz ];then

tar ‐xf libmcrypt‐2.5.8.tar.gz

cd libmcrypt‐2.5.8

./configure

make

make install

cd ..

if [ ! ‐f /usr/lib/libmcrypt.so ];then

ln ‐s /usr/local/lib/libmcrypt.so /usr/lib/

fi

ldconfig

else

echo "没有libmcrypt 源码包文件"

exit

fi

if [ ‐f php‐5.4.24.tar.gz ];then

tar ‐xf php‐5.4.24.tar.gz

cd php‐5.4.24

./configure ‐‐prefix=/usr/local/php5 ‐‐with‐mysql=/usr/local/mysql ‐‐enable‐fpm ‐‐

enable‐mbstring ‐‐with‐mcrypt ‐‐with‐mhash ‐‐with‐config‐file‐path=/usr/local/php5/etc ‐‐withmysqli=/

usr/local/mysql/bin/mysql_config

make && make install

/bin/cp ‐f php.ini‐production /usr/local/php5/etc/php.ini

/bin/cp ‐f /usr/local/php5/etc/php‐fpm.conf.default /usr/local/php5/etc/php‐fpm.conf

cd ..

else

echo "没有php 源码包文件"

exit

fi

}

while :

do

menu

choice

case $select in

1)

install_nginx

;;

2)

install_mysql

;;

3)

install_php

;;

4)

exit

;;

*)

echo Sorry!

esac

done

3. 编写脚本快速克隆KVM 虚拟机

#本脚本针对RHEL7.2 或Centos7.2

#本脚本需要提前准备一个qcow2 格式的虚拟机模板,名称为/var/lib/libvirt/images /.rh7_template 的虚

拟机模板

#该脚本使用qemu‐img 命令快速创建快照虚拟机

#脚本使用sed 修改模板虚拟机的配置文件,将虚拟机名称、UUID、磁盘文件名、MAC 地址

# exit code:

# 65 ‐> user input nothing

# 66 ‐> user input is not a number

# 67 ‐> user input out of range

# 68 ‐> vm disk image exists

IMG_DIR=/var/lib/libvirt/images

BASEVM=rh7_template

read ‐p "Enter VM number: " VMNUM

if [ $VMNUM ‐le 9 ];then

VMNUM=0$VMNUM

fi

if [ ‐z "${VMNUM}" ]; then

echo "You must input a number."

exit 65

elif [[ ${VMNUM} =~ [a‐z] ]; then

echo "You must input a number."

exit 66

elif [ ${VMNUM} ‐lt 1 ‐o ${VMNUM} ‐gt 99 ]; then

echo "Input out of range"

exit 67

fi

NEWVM=rh7_node${VMNUM}

if [ ‐e $IMG_DIR/${NEWVM}.img ]; then

echo "File exists."

exit 68

fi

echo ‐en "Creating Virtual Machine disk image......\t"

qemu‐img create ‐f qcow2 ‐b $IMG_DIR/.${BASEVM}.img $IMG_DIR/${NEWVM}.img &> /dev/null

echo ‐e "\e[32;1m[OK]\e[0m"

#virsh dumpxml ${BASEVM} > /tmp/myvm.xml

cat /var/lib/libvirt/images/.rhel7.xml > /tmp/myvm.xml

sed ‐i "/<name>${BASEVM}/s/${BASEVM}/${NEWVM}/" /tmp/myvm.xml

sed ‐i "/uuid/s/<uuid>.*<\/uuid>/<uuid>$(uuidgen)<\/uuid>/" /tmp/myvm.xml

sed ‐i "/${BASEVM}\.img/s/${BASEVM}/${NEWVM}/" /tmp/myvm.xml

#修改MAC 地址,本例使用的是常量,每位使用该脚本的用户需要根据实际情况修改这些值

#最好这里可以使用便利,这样更适合于批量操作,可以克隆更多虚拟机

sed ‐i "/mac /s/a1/0c/" /tmp/myvm.xml

echo ‐en "Defining new virtual machine......\t\t"

virsh define /tmp/myvm.xml &> /dev/null

echo ‐e "\e[32;1m[OK]\e[0m"

4. 编写一个点名器脚本

#!/bin/bash

#该脚本,需要提前准备一个user.txt 文件

#该文件中需要包含所有姓名的信息,一行一个姓名,脚本每次随机显示一个姓名

while :

do

#统计user 文件中有多少用户

line=`cat user.txt |wc ‐l`

num=$[RANDOM%line+1]

sed ‐n "${num}p" user.txt

sleep 0.2

clear

done

5. 查看有多少远程的IP 在连接本机(不管是通过ssh 还是web 还是ftp 都统计)

#使用netstat ‐atn 可以查看本机所有连接的状态,‐a 查看所有,‐t 仅显示tcp 连接的信息,‐n 数字格式显示

# Local Address(第四列是本机的IP 和端口信息)

#Foreign Address(第五列是远程主机的IP 和端口信息)

#使用awk 命令仅显示第5 列数据,再显示第1 列IP 地址的信息

#sort 可以按数字大小排序,最后使用uniq 将多余重复的删除,并统计重复的次数

netstat ‐atn | awk '{print $5}' | awk '{print $1}' | sort ‐nr | uniq ‐c

6. 对100 以内的所有正整数相加求和(1+2+3+4…+100)

#!/bin/bash

#seq 100 可以快速自动生成100 个整数

sum=0

for i in `seq 100`

do

sum=$[sum+i]

done

echo "总和是:$sum"

7. 统计13:30 到14:30 所有访问apache 服务器的请求有多少个

#awk 使用‐F 选项指定文件内容的分隔符是/或者:

#条件判断$7:$8 大于等于13:30,并且要求,$7:$8 小于等于14:30

#最后使用wc ‐l 统计这样的数据有多少行,即多少个

awk ‐F "[ /:]" '$7":"$8>="13:30" && $7":"$8<="14:30"' /var/log/httpd/access_log |wc ‐l

8. 统计13:30 到14:30 所有访问本机Aapche 服务器的远程IP 地址是什么

#!/bin/bash

#awk 使用‐F 选项指定文件内容的分隔符是/或者:

#条件判断$7:$8 大于等于13:30,并且要求,$7:$8 小于等于14:30

#日志文档内容里面,第1 列是远程主机的IP 地址,使用awk 单独显示第1 列即可

awk ‐F "[ /:]" '$7":"$8>="13:30" && $7":"$8<="14:30"{print $1}' /var/log/httpd/access_log

9. 打印国际象棋棋盘

#!/bin/bash

#设置两个变量,i 和j,一个代表行,一个代表列,国际象棋为8*8 棋盘

#i=1 是代表准备打印第一行棋盘,第1 行棋盘有灰色和蓝色间隔输出,总共为8 列

#i=1,j=1 代表第1 行的第1 列;i=2,j=3 代表第2 行的第3 列

#棋盘的规律是i+j 如果是偶数,就打印蓝色色块,如果是奇数就打印灰色色块

#使用echo ‐ne 打印色块,并且打印完成色块后不自动换行,在同一行继续输出其他色块

for i in {1..8}

do

for j in {1..8}

do

sum=$[i+j]

if [ $[sum%2] ‐eq 0 ];then

echo ‐ne "\033[46m \033[0m"

else

echo ‐ne "\033[47m \033[0m"

fi

done

echo

done

10. 统计每个远程IP 访问了本机apache 几次?

#!/bin/bash

awk '{ip[$1]++}END{for(i in ip){print ip[i],i}}' /var/log/httpd/access_log

如果想上手操作练代码的同学们可以通过阿里云ecs服务器免费试用参与!

入口一:新老同学免费试用

入口二:上云第一站

入口三:学生版超低价云服务器

入口四:云服务器专享特惠版

入口五:云服务器特惠1.5折起

入口七:阿里云最新活动中心

入口八:中小企业权益满减礼包

相关实践学习
2分钟自动化部署人生模拟器
本场景将带你借助云效流水线Flow实现人生模拟器小游戏的自动化部署
7天玩转云服务器
云服务器ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,可降低 IT 成本,提升运维效率。本课程手把手带你了解ECS、掌握基本操作、动手实操快照管理、镜像管理等。了解产品详情:&nbsp;https://www.aliyun.com/product/ecs
目录
相关文章
|
14天前
|
Shell Linux
【linux】Shell脚本中basename和dirname的详细用法教程
本文详细介绍了Linux Shell脚本中 `basename`和 `dirname`命令的用法,包括去除路径信息、去除后缀、批量处理文件名和路径等。同时,通过文件备份和日志文件分离的实践应用,展示了这两个命令在实际脚本中的应用场景。希望本文能帮助您更好地理解和应用 `basename`和 `dirname`命令,提高Shell脚本编写的效率和灵活性。
77 32
|
4月前
|
Shell
一个用于添加/删除定时任务的shell脚本
一个用于添加/删除定时任务的shell脚本
154 1
|
3月前
|
Shell Linux 测试技术
6种方法打造出色的Shell脚本
6种方法打造出色的Shell脚本
113 2
6种方法打造出色的Shell脚本
|
3月前
|
XML JSON 监控
Shell脚本要点和难点以及具体应用和优缺点介绍
Shell脚本在系统管理和自动化任务中扮演着重要角色。尽管存在调试困难、可读性差等问题,但其简洁高效、易于学习和强大的功能使其在许多场景中不可或缺。通过掌握Shell脚本的基本语法、常用命令和函数,并了解其优缺点,开发者可以编写出高效的脚本来完成各种任务,提高工作效率。希望本文能为您在Shell脚本编写和应用中提供有价值的参考和指导。
145 1
|
3月前
|
Ubuntu Shell 开发工具
ubuntu/debian shell 脚本自动配置 gitea git 仓库
这是一个自动配置 Gitea Git 仓库的 Shell 脚本,支持 Ubuntu 20+ 和 Debian 12+ 系统。脚本会创建必要的目录、下载并安装 Gitea,创建 Gitea 用户和服务,确保 Gitea 在系统启动时自动运行。用户可以选择从官方或小绿叶技术博客下载安装包。
142 2
|
4月前
|
监控 网络协议 Shell
ip和ip网段攻击拦截系统-绿叶结界防火墙系统shell脚本
这是一个名为“小绿叶技术博客扫段攻击拦截系统”的Bash脚本,用于监控和拦截TCP攻击。通过抓取网络数据包监控可疑IP,并利用iptables和firewalld防火墙规则对这些IP进行拦截。同时,该系统能够查询数据库中的白名单,确保合法IP不受影响。此外,它还具备日志记录功能,以便于后续分析和审计。
103 6
|
3月前
|
运维 监控 Shell
深入理解Linux系统下的Shell脚本编程
【10月更文挑战第24天】本文将深入浅出地介绍Linux系统中Shell脚本的基础知识和实用技巧,帮助读者从零开始学习编写Shell脚本。通过本文的学习,你将能够掌握Shell脚本的基本语法、变量使用、流程控制以及函数定义等核心概念,并学会如何将这些知识应用于实际问题解决中。文章还将展示几个实用的Shell脚本例子,以加深对知识点的理解和应用。无论你是运维人员还是软件开发者,这篇文章都将为你提供强大的Linux自动化工具。
|
4月前
|
运维 Java Linux
【运维基础知识】Linux服务器下手写启停Java程序脚本start.sh stop.sh及详细说明
### 启动Java程序脚本 `start.sh` 此脚本用于启动一个Java程序,设置JVM字符集为GBK,最大堆内存为3000M,并将程序的日志输出到`output.log`文件中,同时在后台运行。 ### 停止Java程序脚本 `stop.sh` 此脚本用于停止指定名称的服务(如`QuoteServer`),通过查找并终止该服务的Java进程,输出操作结果以确认是否成功。
188 1
|
4月前
|
分布式计算 Hadoop Shell
Hadoop-35 HBase 集群配置和启动 3节点云服务器 集群效果测试 Shell测试
Hadoop-35 HBase 集群配置和启动 3节点云服务器 集群效果测试 Shell测试
116 4
|
4月前
|
分布式计算 Hadoop Shell
Hadoop-36 HBase 3节点云服务器集群 HBase Shell 增删改查 全程多图详细 列族 row key value filter
Hadoop-36 HBase 3节点云服务器集群 HBase Shell 增删改查 全程多图详细 列族 row key value filter
82 3