1.PHP-fpm 启动脚本
#!/bin/bash
[ -f /etc/init.d/functions ] && . /etc/init.d/functions
sou=/opt/php-fpm.txt
if [ -f $sou ];then
echo "此脚本正在使用"
exit
fi
if [ ! $USER == "root" -a ! $UID -eq 0 ];then
echo "没有权限可以使用"
exit
fi
if [ $# -ne 1 ];then
echo "请输入一个参数"
echo "{start|stop|restart|status}"
exit
fi
touch $sou &>/dev/null
pid=/var/run/php-fpm/php-fpm.pid
case $1 in
start)
if [ -f $pid ];then
action "服务正在运行。。。" /bin/true
else
systemctl start php-fpm
if [ $? -eq 0 ];then
action "服务启动成功!" /bin/true
else
action "服务启动失败!" /bin/false
fi
fi
;;
stop)
if [ -f $pid ];then
systemctl stop php-fpm
if [ $? -eq 0 ];then
action "服务停止成功!" /bin/true
else
action "服务停止失败!" /bin/false
fi
else
echo "服务没有运行。。。"
fi
;;
reload)
if [ -f $pid ];then
systemctl reload php-fpm
if [ $? -eq 0 ];then
action "服务平滑启动成功!" /bin/true
else
action "服务平滑启动失败!" /bin/false
fi
else
echo "服务平滑没有运行。。。"
fi
;;
status)
if [ -f $pid ];then
action "服务运行状态!" /bin/true
else
action "服务关闭状态!" /bin/false
fi
;;
restart)
if [ -f $pid ];then
systemctl stop php-fpm
if [ $? -eq 0 ];then
action "服务停止成功!" /bin/true
else
action "服务停止失败!" /bin/false
fi
sleep 3
systemctl start php-fpm
if [ $? -eq 0 ];then
action "服务启动成功!" /bin/true
else
action "服务启动失败!" /bin/false
fi
else
action "php-fpm 服务没有在运行。。。" /bin/true
systemctl start php-fpm
if [ $? -eq 0 ];then
action "服务启动成功!" /bin/true
else
action "服务启动失败!" /bin/false
fi
fi
;;
*)
echo "请你选择{start|stop|restart|status}"
esac
rm -rf $sou
2.根据学生录入的成绩判断,学生的优劣
0-60 补考
60-80 合格
80-100 优秀
思路:
两个条件判断
考虑整数
不能回车为空
#!/bin/bash
read -p "请输入[0-100]:" ll
if [[ ! $ll =~ ^[0-9]+$ || $ll -gt 100 ]];then
echo "你输入的分数不对!"
fi
if [ $i -gt 80 ];then
echo "优秀!"
elif [ $i -ge 60 ];then
echo "合格!"
else
echo "补考!"
fi
3.写一个创建用户的脚本,需要输入创建用户的前缀,比如oldboy,以及后缀。比如123。
提示用户输入要创建的用户的前缀,且必须是字母
提示用户输入要创建的用户的后缀。且必须是数字
将前缀和后缀进行结合
在判断用户是否存在,存在则提示
不存在,则创建
#!/bin/bash
read -p "请输入创建用户的前缀(字母):" qz
if [ -z $qz ];then
echo "不支持回车!"
exit
fi
if [[ ! $qz =~ ^[a-Z]+$ ]];then
echo "请输入字母!"
exit
fi
read -p "请输入创建用户的后缀(整数):" hz
if [ -z $hz ];then
echo "不支持回车!"
exit
fi
if [[ ! $hz =~ ^[0-9]+$ ]];then
echo "请输入一个整数!"
exit
fi
User=${qz}${hz}
id $User &>/dev/null
if [ $? -eq 0 ];then
echo "用户${User}已经存在"
else
useradd $User &>/dev/null
if [ $? -eq 0 ];then
echo "用户$User 创建成功!"
else
echo "用户$User 创建失败!"
exit
fi
fi
4.使用root用户清空/var/log/messages日志,并每次执行保留最近100行
1.root用户执行 $USER $UID
2.判断文件是否存在
3.保留最近100行文件
#!/bin/bash
#1.判断是否是root用户
if [ ! $USER == "root" -a ! $UID -eq 0 ];then
echo "该用户$USER 对此脚本$0 没有执行权限!"
exit
fi
File=/var/log/messages
if [ ! -f $File ];then
echo "$FIle 文件不存在!"
exit
fi
if [ ! -s $File ];then
echo "文件存在,但是文件中没有任何内容!"
exit
fi
#2.清空并保留最近100行内容
tail -100 $File >${File}.bak && cat ${File}.bak >$File
if [ $? -eq 0 ];then
echo "日志清空成功!并保留了最近100行内容!"
rm -f ${File}.bak
else
echo "清空操作失败!"
fi
#!/bin/bash
#1.判断是否是root用户
if [ $USER == "root" -a $UID -eq 0 ];then
File=/var/log/messages
if [ -f $File ];then
if [ -s $File ];then
tail -100 $File >${File}.bak && cat ${File}.bak >$File
if [ $? -eq 0 ];then
echo "日志清空成功!并保留了最近100行内容!"
rm -f ${File}.bak
else
echo "清空操作失败!"
fi
else
echo "文件存在,但是文件中没有任何内容!"
exit
fi
else
echo "$FIle 文件不存在!"
exit
fi
else
echo "该用户$USER 对此脚本$0 没有执行权限!"
exit
5.判断某个服务是否正常启动
位置变量 $1
判断用户是否执行脚本时加了位置变量
是否运行
端口是否存在
进程是否存在
systemctl status $1
netstat -lntup |grep $1
ps aux|grep $1 |grep -v grep
#!/bin/bash
if [ $# -ne 1 ];then
echo "请输入一个位置变量。"
echo "Usage: $0 {sshd|nginx|php-fpm|rsync|mariadb}"
exit
fi
Server=$1
if [ $Server == "mariadb" ];then
Server=mysqld
fi
#1.判断服务是否运行
systemctl status $Server &>/dev/null
Rc=$?
if [ $Rc -eq 0 ];then
echo "服务$Server 正在运行....."
elif [ $Rc -eq 4 ];then
echo "没有$Server 这个服务!"
exit
elif [ $Rc -eq 3 ];then
echo "服务$Server 没有运行..."
else
echo "你输入的服务名称不正确!"
fi
#2.判断端口号是否存在
netstat -lntup |grep $Server &>/dev/null
if [ $? -eq 0 ];then
echo "服务$Server 端口号存在!"
else
echo "服务$Server 端口号不存在!"
fi
#3.判断进程是否存在
ps aux |grep $Server | grep -v grep |grep -v 'pts' &>/dev/null
if [ $? -eq 0 ];then
echo "服务$Server 进程存在!"
else
echo "服务$Server 进程不存在!"
fi
6.系统管理菜单
[root@web /scripts/day06]# cat case-1.sh
#!/bin/bash
menu() {
cat<<EOF
####################
0.帮助信息
1.系统版本
2.系统虚拟平台
3.系统内核版本
4.Eth0-IP地址
5.Eth1-IP地址
6.外网IP地址
7.内存使用情况
8.磁盘使用情况
9.退出
#####################
EOF
}
menu
while true
do
read -p "请输入你要查看的选项,输入对应的数字:" num
if [[ ! $num =~ ^[0-9]$ ]];then
echo "请按照提示输入对应的数字。"
exit
fi
case $num in
0)
menu
;;
1)
cat /etc/redhat-release |awk '{print $1,$(NF-1)}'
;;
2)
hostnamectl |awk '/Virtua/{print $NF}'
;;
3)
hostnamectl |awk '/Kernel/{print $NF}'
;;
4)
ifconfig eth0 |awk 'NR==2{print $2}'
;;
5)
ifconfig eth1 |awk 'NR==2{print $2}'
;;
6)
curl -s icanhazip.com
;;
7)
free -m
;;
8)
df -h
;;
9)
exit
;;
*)
echo "请按照要求输入。"
exit
esac
done
7.实现多级菜单功能
思路:函数 循环
主菜单
cat<<EOF
1.安装Nginx
2.安装PHP
3.退出
EOF
子菜单
cat<<EOF
#####################
1.安装Nginx-1.12
2.安装Nginx-1.14
3.安装Nginx-1.16
4.返回主菜单
#####################
EOF
子菜单
cat<<EOF
#####################
1.安装PHP-5.5
2.安装PHP-5.6
3.安装PHP-7.1
4.返回主菜单
#####################
EOF
#!/bin/bash
master_menu() {
cat<<EOF
################
1.安装Nginx
2.安装PHP
3.退出
################
EOF
}
Nginx_menu() {
cat<<EOF
#####################
1.安装Nginx-1.12
2.安装Nginx-1.14
3.安装Nginx-1.16
4.返回主菜单
#####################
EOF
}
Php_menu() {
cat<<EOF
#####################
1.安装PHP-5.5
2.安装PHP-5.6
3.安装PHP-7.1
4.返回主菜单
#####################
EOF
}
master_menu
trap "" HUP INT TSTP #禁止输入Ctrl+c
while true
do
read -p "请输入你要安装的服务:" Server
case $Server in
1)
clear
Nginx_menu
while true
do
read -p "请输入你要安装的Nginx版本:" Version
case $Version in
1)
echo "你选择是安装Nginx-1.12版本....."
echo "正在安装......."
sleep 2
echo "Nginx-1.12版本安装完成。"
;;
2)
echo "你选择是安装Nginx-1.14版本....."
echo "正在安装......."
sleep 2
echo "Nginx-1.14版本安装完成。"
;;
3)
echo "你选择是安装Nginx-1.16版本....."
echo "正在安装......."
sleep 2
echo "Nginx-1.16版本安装完成。"
;;
4)
clear
master_menu
break
esac
done
;;
2)
clear
Php_menu
while true
do
read -p "请输入你要安装的PHP版本:" install
case $install in
1)
echo "你选择是安装PHP-5.5版本....."
echo "正在安装......."
sleep 2
echo "安装PHP-5.5版本完成....."
;;
2)
echo "你选择是安装PHP-5.6版本....."
echo "正在安装......."
sleep 2
echo "安装PHP-5.6版本完成....."
;;
3)
echo "你选择是安装PHP-7.1版本....."
echo "正在安装......."
sleep 2
echo "安装PHP-7.1版本完成....."
;;
4)
clear
master_menu
break
esac
done
;;
3)
echo "你选择退出。"
exit
;;
*)
echo "请按照要求输入。"
esac
done
8.创建用户,首先输入用户的前缀,判断前缀是否空,是否为字母,输入创建用户的数量,提示用户要创建的用户是什么,是否确认创建,判断数量是否是正整数,是否为空,是否确认创建 Y N .创建随机密码,判断是否是root用户。
[root@web ~]# echo $RANDOM |md5sum |cut -c 1-10
34e20f3dc6
-l 指定密码的位数
-c 小写字母
-C 大写字母
-d 数字
-s 特殊符号
[root@web ~]# mkpasswd -l 24 -c 6 -C 6 -d 6 -s 6
3~'4AWi2E*oMXb9#dJ=87v+e
tee 重定向,将输出结果重定向到文件中并输出到屏幕上面
-a 追加
#!/bin/bash
if [ $USER == "root" -a $UID -eq 0 ];then
echo "当前用户为超级管理员,有创建用户的权限!"
else
echo "该用户$USER 对此脚本$0 没有执行权限!"
exit
fi
read -p "请输入你要创建用户的前缀(必须是字母):" Qz
if [ -z $Qz ];then
echo "不支持回车!请按照要求输入字母!"
exit
fi
if [[ $Qz =~ ^[a-Z]+$ ]];then
echo "你输入的前缀符合要求,继续创建用户!"
else
echo "你输入的前缀不符合要求,游戏结束!"
exit
fi
read -p "请输入你要创建用户的数量(必须是正整数):" num
if [ -z $num ];then
echo "不支持回车!请按照要求输入字母!"
exit
fi
if [[ $num =~ ^[0-9]+$ ]];then
echo "你输入的数字符合要求,继续创建用户!"
else
echo "你输入的数字不符合要求!无法创建用户!"
exit
fi
read -p "你要创建的用户为:${Qz}1..${Qz}${num},是否确认创建[Yes|No]:" Qr
if [ -z $Qr ];then
echo "不支持回车!请按照要求输入[Yes|No]!"
exit
fi
case $Qr in
Y|Yes|yes|y)
echo "你选择了创建用户。"
for i in $(seq $num )
do
User=${Qz}$i
id $User &>/dev/null
if [ $? -eq 0 ];then
echo "用户已经存在!"
else
useradd $User &>/dev/null
if [ $? -eq 0 ];then
echo "用户$User 创建成功!"
Pass=$(mkpasswd -l 24 -c 6 -C 6 -d 6 -s 6)
echo $Pass |passwd --stdin $User &>/dev/null
if [ $? -eq 0 ];then
echo "用户$User 密码设置成功!密码信息存放在/root/${Qz}_pass.txt。"
echo -e "User: $User \t\t Password: $Pass " >>/root/${Qz}_pass.txt
else
echo "用户$User 密码设置失败!"
continue
fi
else
echo "用户$User 创建失败!"
continue
fi
fi
done
chmod 400 /root/${Qz}_pass.txt &>/dev/null
;;
N|No|no|n)
echo "你选择不创建用户!"
exit
;;
*)
echo "你输入的不符合要求,请按照要求输入[Yes|No]"
esac
9.删除用户高级版脚本
#!/bin/bash
if [ $USER == "root" -a $UID -eq 0 ];then
echo "该用户$USER 有删除用户的权利!"
else
echo "该用户$USER 没有删除用户的权利!"
exit
fi
read -p "请输入你要删除用户的前缀(必须是字母):" Qz
if [ -z $Qz ];then
echo "不支持回车键,请按照要求输入。"
exit
fi
if [[ $Qz =~ ^[a-Z]+$ ]];then
echo "你输入的前缀符合要求!继续删除用户!"
else
echo "你输入的前缀不符合要求!"
exit
fi
read -p "请输入你要删除用户的数量(必须是正整数):" num
if [ -z $num ];then
echo "不支持回车键,请按照要求输入。"
exit
fi
if [[ $num =~ ^[0-9]+$ ]];then
echo "你输入的数字符合要求!"
else
echo "你输入的数字不符合要求!"
exit
fi
read -p "你要删除的用户是${Qz}1..${Qz}${num},是否确认删除[Yes|No]:" Qr
if [ -z $Qr ];then
echo "不支持回车键,请按照要求输入。"
exit
fi
if [[ $Qr =~ ^[a-Z]+$ ]];then
echo "你选择删除用户!继续删除"
else
echo "你输入的不符合要求!请按照要求输入[Yes|No]"
exit
fi
case $Qr in
Y|Yes|y|yes)
for i in $(seq $num)
do
User=${Qz}$i
id $User &>/dev/null
if [ $? -eq 0 ];then
userdel -r $User &>/dev/null
if [ $? -eq 0 ];then
echo "$User 用户删除成功!"
else
echo "$User 用户删除失败!"
fi
else
echo "用户$User 不存在!"
fi
done
;;
N|No|n|no)
echo "你选择不删除用户!你很谨慎!"
exit
;;
*)
echo "请不要乱输!"
exit
esac
10.编写一个上课随机点名脚本。
for 有个名单 循环多少次 先统计名单人员的数量 随机数 取余
#!/bin/bash
Stu_count=$(wc -l student.txt|awk '{print $1}')
for i in {1..20}
do
Random=$(echo $(( $RANDOM % $Stu_count + 1 )))
sed -n "${Random}p" student.txt
sleep 0.2
done
stu_name=$(sed -n "${Random}p" student.txt)
echo -e "天玄子:\033[32m $stu_name \033[0m"
#严谨版的学生点名脚本
#!/bin/bash
Stu_file=student.txt
if [ ! -f $Stu_file ];then
echo "学生人员名单文件$Stu_file 不存在!"
exit
fi
if [ ! -s $Stu_file ];then
echo "学生人员名单文件存在,但是是空的!"
exit
fi
grep -E '^[ \t]*$' $Stu_file &>/dev/null
if [ $? -eq 0 ];then
echo "学生人员名单中存在空格,取值会出现空行的情况!"
exit
fi
Stu_count=$(wc -l $Stu_file |awk '{print $1}')
for i in {1..20}
do
Random=$(echo $(( $RANDOM % $Stu_count + 1 )))
sed -n "${Random}p" student.txt
sleep 0.2
done
stu_name=$(sed -n "${Random}p" $Stu_file)
echo -e "天玄子:\033[32m $stu_name \033[0m"
11.使用for循环实现数据库的分库分表备份。
#备份库
[root@web /scripts/day07]# mysqldump -uroot -p123 -B mysql >mysql.sql
#备份表
[root@web /scripts/day07]# mysqldump -uroot -p123 wordpress wp_users >wordpress_wp_users.sql
#取出所有要备份的数据库
[root@web /scripts/day07]# mysql -uroot -p123 -e "show databases;" |sed 1d | grep -v '.*schema'
mysql
test
wordpress
world
#取出wordpress数据库中的所有表
[root@web /scripts/day07]# mysql -uroot -p123 -e "use wordpress;show tables;" |sed 1d
wp_commentmeta
wp_comments
wp_links
wp_options
wp_postmeta
wp_posts
wp_term_relationships
wp_term_taxonomy
wp_termmeta
wp_terms
wp_usermeta
wp_users
#!/bin/bash
Db_User=root
Db_Pass=123
Bak_Dir=/backup/mysql
Date=$(date +%F)
Db_list=$(mysql -u$Db_User -p$Db_Pass -e "show databases;" |sed 1d | grep -v '.*schema')
[ -d $Bak_Dir ] || mkdir -p $Bak_Dir
for Database in $Db_list
do
mysqldump -u$Db_User -p$Db_Pass --single-transaction -B $Database >$Bak_Dir/${Date}_${Database}.sql
if [ $? -eq 0 ];then
echo "数据库$Database 备份成功....."
Table_list=$(mysql -u$Db_User -p$Db_Pass -e "use $Database;show tables;" |sed 1d)
for Tables in $Table_list
do
mysqldump -u$Db_User -p$Db_Pass --single-transaction $Database $Tables >$Bak_Dir/${Date}_${Database}_${Tables}.sql
if [ $? -eq 0 ];then
echo "数据库$Database 下的表$Tables 备份成功......"
else
echo "数据库$Database 下的表$Tables 备份失败......"
fi
done
else
echo "数据库$Database 备份失败....."
fi
done
12.批量创建用户脚本,需要用户输入创建的用户数量(必须是整数),以及需要用户输入创建的前缀(不能为空),次脚本仅root可以执行,其他用户无法执行,创建用户的密码是随机密码,并保存到一个指定的文件中,例如:前缀qzg,个数10,代表创建qzg1~qzg10,总共10个用户.
#!/bin/bash
read -p "请输入要创建的用户:" mun
if [ -z $mun ];then
echo "前缀不支持空"
exit
fi
read -p "请输入要创建的个数:" gs
if [[ ! $gs =~ ^[0-9]+$ ]];then
echo "你输入的不是一个整数"
exit
fi
echo "用户$mun 个数$gs"
read -p "你要创建以上用户么[Y|N]: " i
case $i in
y|Y|yes|YES)
for i in `seq 1 $gs`
do
user=${mun}${i}
id $user &>/dev/null
rc=$?
if [ $rc -eq 0 ];then
echo "用户已经存在!"
else
useradd $user
if [ $? -eq 0 ];then
echo "用户创建成功!"
else
echo "用户创建失败!"
fi
fi
done
;;
n|N|NO|no)
echo "你确定这么创建。。。"
exit
;;
*)
echo "你输入的不对请重新输入"
exit
esac
13.批量探测主机存活状态172.16.1.{1..254},扫描次主机的22端口,是否存活
#!/bin/bash
a=1
while [ $a -le 254 ]
do
{
ping -c1 -W1 10.0.0.$a &>/dev/null
if [ $? -eq 0 ];then
echo "10.0.0.$a ip是通的"
nmap -p22 10.0.0.$a |grep 22 &>/dev/null
if [ $? -eq 0 ];then
Port=$(nmap -p22 10.0.0.$a |grep 22|awk '{print $2}')
if [ $Port == "open" ];then
echo "10.0.0.$a sshd的端口是开放的"
else
echo "10.0.0.$a sshd的端口是不开放的"
fi
fi
fi
} &
done
14.统计Nginx日志中每个IP的访问量有多少,日志如下:
192.168.56.1 - - [21/May/2018:20:44:06 -0400] "GET /index.html HTTP/1.0" 404 169 "-" "ApacheBench/2.3" "-"/code/index.html
awk '{print $1}' nginx.txt |sort|uniq -c|sort -nr|head
15.编写一个脚本,计算100以内所有能被3整除数字的和
#!/bin/bash
sum=0
for i in `seq 1 100`
do
aa=$(expr $i % 3)
if [ $aa -eq 0 ];then
sum=$[$sum+$i]
fi
done
echo "100以内能被3整除的数和为 $sum"
16.写一个Shell脚本通过curl命令返回的状态码来判定所访问的网站是否正常,比如当前状态码200,才算正常
#!/bin/bash
read -p "请出入一个你想curl的网站域名: " yu
if [ -z $yu ];then
echo "请不要输入一个空的域名"
exit
fi
curl -I -s $yu &>/dev/null
if [ $? -eq 0 ];then
echo "域名真实存在"
aa=$(curl -I -s $yu|awk 'NR==1 {print $2 }')
if [ $aa -eq 200 ];then
echo "$yu 这个网站正常"
else
echo "$yu 这个网站不正常"
fi
else
echo "域名不存在"
fi
17.抓阄题目学生外出企业项目实践机会来了,但是,名额有限,队员限3人,因此需要挑选学生,因此需要一个抓阄的程序:
要求:
(1)执行脚本后,想去的同学输入英文名字全拼,产生随机数01-99之间的数字,数字越大就去参加项目实践,前面已经抓到的数字,下次不能在出现相同数字。
(2) 第一个输入名字后,屏幕输出信息,并将名字和数字记录到文件里,程序不能退出继续等待别的学生输入。
while true
do
sj=`echo $(($RANDOM%99+1))`
cf=`grep -w "$sj" name.txt|wc -l`
if [ $cf -eq 1 ];then
continue
else
read -p "请输入您的英文名[gouzi]: " name
if [ -z $name ];then
continue
else
if [ $name == "exit" ];then
break
fi
fi
echo -e "$name \t $sj " | tee -a name.txt
fi
done
cat name.txt |sort -nrk2|head -n3
18.系统初始化
#!/bin/bash
[ -f /etc/init.d/functions ] && . /etc/init.d/functions
ZT=$1
FIREWALLD () {
systemctl stop firewalld
if [ $? -eq 0 ];then
action "防火墙关闭成功!" /bin/true
else
action "防火墙关闭失败!" /bin/false
fi
}
Selinux () {
sum=$(cat /etc/selinux/config |awk -F= 'NR==7{print $2}')
if [ $sum = disabled ];then
action "selinux 关闭成功!" /bin/true
else
action "selinux 关闭失败!" /bin/false
fi
}
Yum () {
Version=$(awk '{print $(NF-1)}' /etc/redhat-release)
if [ ${Version%%.*} -eq 6 ];then
rm -rf /etc/yum.repos.d/* &>/dev/null
if [ $? -eq 0];then
action "开始安装Base源。。。" /bin/true
curl -s -o /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-6.repo
if [ $? -eq 0 ];then
action "Base安装成功!" /bin/true
curl -s -o /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-6.repo
if [ $? -eq 0 ];then
action "eplo源 安装成功" /bin/true
else
action "eplo源 安装失败" /bin/false
fi
else
action "Base安装失败!" /bin/false
fi
else
action "没有该版本的源!" /bin/false
exit
fi
elif [ ${Version%%.*} -eq 7 ];then
rm -rf /etc/yum.repos.d/* &>/dev/null
if [ $? -eq 0 ];then
action "开始安装Base源。。。" /bin/true
curl -s -o /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
if [ $? -eq 0 ];then
action "Base安装成功!" /bin/true
curl -s -o /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo
if [ $? -eq 0 ];then
action "eplo源 安装成功" /bin/true
else
action "eplo源 安装失败" /bin/false
fi
else
action "Base安装失败!" /bin/false
fi
else
action "没有该版本的源!" /bin/false
exit
fi
fi
}
case $ZT in
firewalld)
FIREWALLD
;;
selinux)
Selinux
;;
yum)
Yum
;;
*)
echo "你输入的不对输入 {firewalld|selinux|yum}"
exit
esac
网友评论