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

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
RDS MySQL Serverless 高可用系列,价值2615元额度,1个月
云数据库 RDS PostgreSQL,高可用系列 2核4GB
简介: 【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折起

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

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

相关实践学习
通义万相文本绘图与人像美化
本解决方案展示了如何利用自研的通义万相AIGC技术在Web服务中实现先进的图像生成。
7天玩转云服务器
云服务器ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,可降低 IT 成本,提升运维效率。本课程手把手带你了解ECS、掌握基本操作、动手实操快照管理、镜像管理等。了解产品详情:&nbsp;https://www.aliyun.com/product/ecs
目录
相关文章
|
3月前
|
存储 安全 Unix
七、Linux Shell 与脚本基础
别再一遍遍地敲重复的命令了,把它们写进Shell脚本,就能一键搞定。脚本本质上就是个存着一堆命令的文本文件,但要让它“活”起来,有几个关键点:文件开头最好用#!/usr/bin/env bash来指定解释器,并用chmod +x给它执行权限。执行时也有讲究:./script.sh是在一个新“房间”(子Shell)里跑,不影响你;而source script.sh是在当前“房间”里跑,适合用来加载环境变量和配置文件。
|
3月前
|
存储 Shell Linux
八、Linux Shell 脚本:变量与字符串
Shell脚本里的变量就像一个个贴着标签的“箱子”。装东西(赋值)时,=两边千万不能有空格。用单引号''装进去的东西会原封不动,用双引号""则会让里面的$变量先“变身”再装箱。默认箱子只能在当前“房间”(Shell进程)用,想让隔壁房间(子进程)也能看到,就得给箱子盖个export的“出口”戳。此外,Shell还自带了$?(上条命令的成绩单)和$1(别人递进来的第一个包裹)等许多特殊箱子,非常有用。
|
6月前
|
Shell
Shell脚本循环控制:shift、continue、break、exit指令
使用这些命令可以让你的Shell脚本像有生命一样动起来。正确使用它们,你的脚本就能像一场精心编排的舞蹈剧目,既有旋律的起伏,也有节奏的跳跃,最终以一场惊艳的表演结束。每一个动作、每一个转折点,都准确、优雅地完成所需要表达的逻辑。如此,你的脚本不只是冰冷的代码,它透过终端的界面,跳着有节奏的舞蹈,走进观众——使用者的心中。
280 60
|
3月前
|
数据采集 监控 Shell
无需Python:Shell脚本如何成为你的自动化爬虫引擎?
Shell脚本利用curl/wget发起请求,结合文本处理工具构建轻量级爬虫,支持并行加速、定时任务、增量抓取及分布式部署。通过随机UA、异常重试等优化提升稳定性,适用于日志监控、价格追踪等场景。相比Python,具备启动快、资源占用低的优势,适合嵌入式或老旧服务器环境,复杂任务可结合Python实现混合编程。
|
9月前
|
关系型数据库 MySQL Shell
MySQL 备份 Shell 脚本:支持远程同步与阿里云 OSS 备份
一款自动化 MySQL 备份 Shell 脚本,支持本地存储、远程服务器同步(SSH+rsync)、阿里云 OSS 备份,并自动清理过期备份。适用于数据库管理员和开发者,帮助确保数据安全。
|
5月前
|
Web App开发 缓存 安全
Linux一键清理系统垃圾:释放30GB空间的Shell脚本实战​
这篇博客介绍了一个实用的Linux系统盘清理脚本,主要功能包括: 安全权限检查和旧内核清理,保留当前使用内核 7天以上日志文件清理和系统日志压缩 浏览器缓存(Chrome/Firefox)、APT缓存、临时文件清理 智能清理Snap旧版本和Docker无用数据 提供磁盘空间使用前后对比和大文件查找功能 脚本采用交互式设计确保安全性,适合定期维护开发环境、服务器和个人电脑。文章详细解析了脚本的关键功能代码,并给出了使用建议。完整脚本已开源,用户可根据需求自定义调整清理策略。
621 1
|
7月前
|
存储 Unix Shell
确定Shell脚本在操作系统中的具体位置方法。
这对于掌握Linux的文件系统组织结构和路径方面的理解很有帮助,是我们日常工作和学习中都可能使用到的知识。以上讲解详细清晰,应用简便,是每一个想要精通操作系统的计算机爱好者必备的实用技能。
193 17
|
7月前
|
Linux Shell
Centos或Linux编写一键式Shell脚本删除用户、组指导手册
Centos或Linux编写一键式Shell脚本删除用户、组指导手册
220 4
|
7月前
|
Linux Shell 数据安全/隐私保护
Centos或Linux编写一键式Shell脚本创建用户、组、目录分配权限指导手册
Centos或Linux编写一键式Shell脚本创建用户、组、目录分配权限指导手册
440 3
|
8月前
|
Linux Shell
在Linux、CentOS7中设置shell脚本开机自启动服务
以上就是在CentOS 7中设置shell脚本开机自启动服务的全部步骤。希望这个指南能帮助你更好地管理你的Linux系统。
668 25