美文网首页
shell练习题

shell练习题

作者: 吃可爱长大鸭 | 来源:发表于2019-11-05 20:12 被阅读0次

1.read示例语法,简单备份场景

提示用户输入一个要备份的目录
提示用户你备份的目录是什么
开始备份
提示备份完成
#!/bin/bash
read -p "请输入要备份的目录:" dir
read -p "请问要备份的目录是什么:" op
echo "目录开始备份" && echo "备份完成"

2.read示例语法,测试用户输入的IP是否通

#!/bin/bash
read -p "请输入IP地址:" IP
ping -c1 -W1 $IP &>/dev/null
if [ $? -eq 0 ]; then
    echo "IP $IP 地址是通的!"
else
    echo "IP $IP 地址是不通的!"                                                                                 
fi

3.使用read 命令写一个脚本修改主机名

#!/bin/bash
read -p "请输入主机名:" hostname
hostnamectl set-hostname $hostname &>/dev/null

4.修改ip地址的脚本,脚本可以无限的执行

#!/bin/bash
#1.提示用户输入新的ip地址
read -p "请输入你新的IP地址的主机位:" Host_Ip
#2.提示用户是否确认修改
read -p "请确认是否修改ip地址的主机位:[Y|N]:" Qr
#3.根据用户输入的Y|N进行判断
if [ $Qr == "Y" ];then
    echo "你确认修改ip地址的主机位"
    sed -ri   "s#(^IPAD.*\.).*#\1$Host_Ip#g" /etc/sysconfig/network-scripts/ifcfg-eth[01]  &>/dev/null
    if [ $? -eq 0 ];then
        echo "IP地址的主机位修改成功!"
        read -p "是否确认要重启网络服务进行生效![Y|N]:" qr
        if [ $qr == "Y" ];then
            echo "你选择重启网路服务!请做好心理准备!"
            echo "重启网络服务之后,当前会话会断开,需要使用新的ip地址进行连接登录。"
            systemctl  restart  network  &>/dev/null
        else
            echo "你没有选择重启网路服务!你可以选择手动重启!"
            exit
        fi
    else
        echo "IP地址的主机位修改失败!"
        exit
    fi
else
    echo "你选择放弃修改ip地址IP主机位,再见!"
    exit
fi

5.. 场景实践一:查看内存当前使用状态,如果使用率超过80%则报警发邮件

#!/bin/bash
free=$(free -m |awk -F "[ .]+" '/^Mem/{print $3/$2*100}'|awk -F '.' '{print $1}')
mail=$(mail -s "内存报警" 1003451503@qq.com < /root/5.txt &>/dev/null)
if [ $free -ge 11 ]; then                                                                                        
    echo "内存$free 使用正常"
else
    echo "内存$free 使用不正常"
fi

内存压力测试
[root@web ~]# dd if=/dev/zero of=/dev/null bs=700M count=100

6.场景实践二:在每月第一天备份并压缩/etc目录的所有内容,存放到/root/bak目录,存放的形式 2019-11-05_etc.tar.gz,脚本名称为fileback,存放在/root的家目录下。

1.备份什么   /etc/
2.备份到哪里  /root/bak
3.怎么备份  gzip  tar  
4.带上时间信息
#!/bin/bash
Date=$(date +%F)
Bak_Dir=/root/bak
[ -d $Bak_Dir ] || mkdir -p  $Bak_Dir
#2.判断文件存不存在
if [ ! -f $Bak_Dir/${Date}_etc.tar.gz ];then
    tar czf $Bak_Dir/${Date}_etc.tar.gz  /etc/ &>/dev/null
    if [ $? -eq 0 ];then
        echo "/etc/目录打包备份成功!"
    else
        echo "/etc/目录打包备份失败!"
        exit
    fi
else
    echo "当前目录已经备份过!你可以检查一下是否重复备份!"
    exit
fi

7.场景实践三:在/backup下创建10个.txt的文件,找到/backup目录下所有后缀名为.txt的文件

1)批量修改txt为txt.bak                           
2)把所有的.bak文件打包压缩为123.tar.gz         
3)批量还原文件的名字,及把增加的.bak再删除
#!/bin/bash
dir=/backup
[ ! -e $dir ] && mkdir $dir || cd $dir
for i in {1..10}.txt
do
    touch $i
done
find  $dir  -type  f  -name "*.txt"  >$dir/txt.log

#循环
for i in $(cat $dir/txt.log) 
do
    mv $i ${i}.bak
done

echo "文件名已经全部修改为.bak."
#打包
if [ ! -f $dir/123.tar.gz ];then
    tar czf $dir/123.tar.gz  $(find $dir -type f -name "*.bak") &>/dev/null
    if [ $? -eq 0 ];then
        echo "所有的.bak文件已经打包压缩备份成功!"
    else
        echo "所有的.bak文件已经打包压缩备份失败!"
        exit
    fi
else
    echo "所有的.bak文件已经打包压缩备份,看下是否重复备份!"
fi
#还原
find $Dir -type f -name "*.bak"  >$Dir/bak.log

for i in  $(cat $Dir/bak.log)
do
        mv  $i   ${i%.*}  
    done

    echo "文件名还原成功!"

8.取出下列字符串长度小于3的单词,I am qiuzengjia teacher I am 18。

#!/bin/bash
for i in I am qiuzengjia teacher I am 18
do
        [ ${#i} -lt 3 ]  &&  echo $i
    done                                       

9.做一个加减乘除的计算器。

#!/bin/bash                                                                                                                                                  
read -p "请输入第一个数字:" num1
read -p "请输入第二个数字:" num2
echo "$num1 + $num2 = $[ $num1 + $num2 ]"
echo "$num1 - $num2 = $[ $num1 - $num2 ]"
echo "$num1 * $num2 = $[ $num1 * $num2 ]"
echo "$num1 / $num2 = $[ $num1 / $num2 ]"

10.使用Shell脚本打印,系统版本、内核版本平台、虚拟平台、静态主机名、eth0网卡IP地址、eth1网卡IP地址、当前主机的外网IP地址curl -s icanhazip.com

#!/bin/bash
System=$(hostnamectl   |awk '/System/{print $3,$4,$5}')                                             
Kernel=$(hostnamectl  |awk '/Kernel/{print $3}')
Vm=$(hostnamectl  |awk '/Virtua/{print $2}')
Hostname=$(hostnamectl  |awk '/Static/{print $3}')
Eth0=$(ifconfig eth0 |awk 'NR==2{print $2}')
Eth1=$(ifconfig eth1 |awk 'NR==2{print $2}')
Network=$(curl -s  icanhazip.com)
echo "当前系统版本为:$System"
echo "当前内核版本及平台为:$Kernel"
echo "当前系统虚拟平台为:$Vm"
echo "当前系统静态主机名为:$Hostname"
echo "当前eth0 IP地址为:$Eth0"
echo "当前eth1 IP地址为:$Eth1"
echo "当前系统外网ip为:$Network"

11.需求描述:变量string="Bigdata process is Hadoop, Hadoop is open source project",执行脚本后,打印输出string变量,并给出用户以下选项:

#需求
1)打印string长度
2)删除字符串中所有的Hadoop
3)替换第一个Hadoop为Linux
4)替换全部Hadoop为Linux
用户请输入数字1|2|3|4,可以执行对应项的功能。
#!/bin/bash
while true
do
string="Bigdata process is Hadoop, Hadoop is open source project"
cat << EOF
1)、打印string长度
2)、删除字符串中所有的Hadoop
3)、替换第一个Hadoop为Linux
4)、替换全部Hadoop为Linux
EOF
    read -p "用户请输入数字,可以执行对应项的功能: " ll
    if [ $ll -eq 1  ];then
        echo "${#string}"
    fi
    if [ $ll -eq 2 ]; then
        echo ${string//Hadoop/}
    fi
    if  [ $ll -eq 3 ]; then
        echo ${string/Hadoop/Linux}
    fi
    if  [ $ll -eq 4 ]; then
        echo ${string//Hadoop/Linux}
        exit
    fi
    echo "------------------------------------------"
done

12.判断用户存不存在系统,存不存在家目录。

#!/bin/bash
if grep $1 /etc/passwd &>/dev/null;then
    echo "用户$1 存在该系统。"
    if ls -d  /home/$1 &>/dev/null;then
        echo "用户$1 存在家目录。"
    else
        echo "用户$1 不存在家目录。"
    fi
else
    echo "用户$1 不存在该系统。"                                                                    
    if ls -d /home/$1  &>/dev/null;then
        echo "用户$1 存在家目录。"
    else
        echo "用户$1 不存在家目录。"
    fi
fi

13.文件比较场景实践,备份数据库

#1.备份mysql,手动输入你需要备份的库名称

1)提示用户手动输入库名称:read 
2)如果用户输入数据库名称,则执行mysqldump命令备份
3)备份到哪,/backup/mysql 
4)超过7天的删除
#!/bin/bash
#1.提示用户输入要备份的数据库
read -p "请输入你要使用哪一个用户进行备份:" Db_user
read -s -p "请输入备份用户的密码:" Db_pass
echo
read -p "请输入你要备份的数据库:" Db
#2.定义变量
Date=$(date +%F)
Bak_Dir=/backup/mysql

#3.判断备份目录是否存在
[  -d $Bak_Dir ] || mkdir -p $Bak_Dir  &>/dev/null

#4.备份数据库

mysqldump -u$Db_user -p$Db_pass -B $Db > $Bak_Dir/${Date}_${Db}.sql 

if [ $? -eq 0 ];then
    echo "数据库$Db  备份成功!"
else
    echo "数据库$Db 备份失败!"
    exit
fi

#超过7天的数据删除

find  $Bak_Dir  -mtime +7 -delete 
if [ $? -eq 0 ];then
    echo "七天以前的数据清除成功!"
else
    echo "七天以前的数据清除失败!"
    exit
fi

14.查看磁盘/分区当前使用状态,如果使用率超过80%则报警发邮件

#!/bin/bash                                                                                         
Df=$(df -h |awk 'NR==2{print $5}') 
if [ ${Df/\%/} -gt 10 ];then
     echo "磁盘使用率过高!当前使用率为:$Df"
else
     echo "磁盘使用率正常!当前使用率为:$Df"
fi

15. 场景实践三:条件测试,创建用户

0.提示用户输入一个要创建的用户
1.判断用户是否存在,存在则提示
2.不存在,则创建
3.判断创建是否成功
#!/bin/bash                                                                                         
read -p "请输入要创建的用户:" yh

grep $yh /etc/passwd &>/dev/null

if [ $? -eq 0 ];then 
    echo "该$yh 用户存在."
    exit
else
    useradd $yh &>/dev/null
    if [ $? -eq 0 ];then
        echo "用户$yh 创建成功!"
    else
        echo "用户$yh 创建失败!"
    fi
fi

16.场景实践四:函数库使用,判断url地址是否能通

#!/bin/bash
[ -f /etc/init.d/functions ]  &&  source  /etc/init.d/functions 

read -p "请输入一个你要测试的url地址:"  Url

ping -c1 -W1 $Url  &>/dev/null

if [ $? -eq 0 ];then
    action "该url地址$Url 是通的。"  /bin/true                                                      
else
    action "该url地址$Url 是不通的。" /bin/false
fi

17.根据学生录入的成绩判断,学生的优劣

  0-60  补考
  60-80 合格
  80-100 优秀
思路:
     两个条件判断
     考虑整数
     不能回车为空
单条件 

[root@web /scripts/day04]# cat fenshu-1.sh
#!/bin/bash
read  -p  "请输入一个分数:" fs

expr $fs + 1  &>/dev/null
if [ ! $? -eq 0 ];then
    echo  "请输入一个整数!"
    exit
fi

if [ -z $fs ];then
    echo "不支持回车!"
    exit
fi
if [ $fs -gt 100  ];then
    echo "不支持100以上的数字"
elif [ $fs -ge 80 ];then
    echo "优秀"
elif [ $fs -ge 60 ];then
    echo "及格"
else
    echo "补考"
fi



多条件


[root@web /scripts/day04]# cat fenshu.sh
#!/bin/bash
read  -p  "请输入一个分数:" fs

expr $fs + 1  &>/dev/null
if [ ! $? -eq 0 ];then
        echo  "请输入一个整数!"
        exit
fi

if [ -z $fs ];then
    echo "不支持回车!"
    exit
fi
if [ $fs -ge 0 -a $fs -lt 60 ];then
    echo "补考"
elif [ $fs -ge 60 -a $fs -lt 80 ];then
    echo "及格"
elif [ $fs -ge 80 -a $fs -le 100 ];then
    echo "优秀"
else
    echo "只支持0-100的数字"
fi

18.写一个创建用户的脚本,需要输入创建用户的前缀,比如oldboy,以及后缀。比如123。

提示用户输入要创建的用户的前缀,且必须是字母

提示用户输入要创建的用户的后缀。且必须是数字

将前缀和后缀进行结合

在判断用户是否存在,存在则提示

不存在,则创建
[root@web /scripts/day04]# cat  if-2.sh
#!/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

19.使用root用户清空/var/log/messages日志,并每次执行保留最近100行

1.root用户执行  $USER    $UID  

2.判断文件是否存在  

3.保留最近100行文件
[root@web /scripts/day04]# cat if-3.sh
#!/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
[root@web /scripts/day04]# cat if-3.sh
#!/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
fi

20.判断某个服务是否正常启动

位置变量  $1  

判断用户是否执行脚本时加了位置变量

    是否运行
    端口是否存在
    进程是否存在

systemctl  status  $1  

netstat  -lntup  |grep  $1

ps  aux|grep  $1  |grep  -v   grep   
[root@web /scripts/day04]# cat if-5.sh 
#!/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

21.根据不同的系统进行安装不同的yumy源,Centos6和Centos7

[root@web /scripts/day05]# cat  yum.sh 
#!/bin/bash
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
        echo  "操作系统6系列的旧有的yum备份完毕!"
        echo  "开始更新Base源....."
        curl -s  -o /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-6.repo  &>/dev/null
        if [ $? -eq 0 ];then
            echo "Base更新成功!"
            echo "开始更新Epel源....."
            curl -s  -o /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-6.repo  &>/dev/null
            if [ $? -eq 0 ];then
                echo "Epel源更新成功!"
            else
                echo "Epel源更新失败!"
            fi
        else
            echo  "Base更新失败!"
        fi
    else
        echo  "操作系统6系列的旧有的yum备份失败!"
        exit
    fi
elif [ ${Version%%.*} -eq 7 ];then
    rm  -rf  /etc/yum.repos.d/*  &>/dev/null
    if [ $? -eq 0 ];then
        echo  "操作系统7系列的旧有的yum备份完毕!"
        echo  "开始更新Base源....."
        curl -s  -o /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo  &>/dev/null
        if [ $? -eq 0 ];then
            echo "Base更新成功!"
            echo "开始更新Epel源....."
            curl -s  -o /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo  &>/dev/null
            if [ $? -eq 0 ];then
                echo "Epel源更新成功!"
            else
                echo "Epel源更新失败!"
            fi
        else
            echo  "Base更新失败!"
        fi
    else
        echo  "操作系统7系列的旧有的yum备份失败!"
        exit
    fi
else
    echo "没有该系统版本的yum源!"
    exit
fi

22.rsync启动脚本

思路
启动  /usr/bin/rsync --daemon

停止  pkill  rsync

状态  

创建一个pid文件
[root@web /scripts/day05]# cat case-3.sh    
#!/bin/bash
[ -f /etc/init.d/functions ] && source /etc/init.d/functions
if [ $# -ne 1 ];then
    echo "请输入一个参数。"
    echo "Usage: $0 {start|stop|restart|status}"
    exit
fi
Pid=/var/run/rsync.pid
case $1 in
    start)
            if [ -f $Pid ];then
                action "Rsync服务正在运行...." /bin/true
            else
                touch  $Pid  &>/dev/null && /usr/bin/rsync --daemon  &>/dev/null
                if [ $? -eq 0 ];then
                    action "Rsync服务启动成功!"  /bin/true
                else
                    action "Rsync服务启动失败!"  /bin/false
                    rm -f $Pid  &>/dev/null
                    exit
                fi
            fi
            ;;
    stop)
            if [ -f $Pid ];then
                rm -f  $Pid  &>/dev/null
                pkill  rsync  &>/dev/null  || pkill  rsync  &>/dev/null
                if [ $? -eq 0 ];then
                    action "Rsync服务停止成功!"  /bin/true
                else
                    action "Rsync服务停止失败!"  /bin/false
                fi
            else
                action "Rsync没有运行....." /bin/true
            fi
            ;;
    restart)
            if [  -f $Pid ];then
                rm -f  $Pid  &>/dev/null
                pkill  rsync  &>/dev/null  || pkill  rsync  &>/dev/null
                if [ $? -eq 0 ];then
                    action "Rsync服务停止成功!"  /bin/true
                else
                    action "Rsync服务停止失败!"  /bin/false
                fi
                sleep 3
                touch  $Pid  &>/dev/null && /usr/bin/rsync --daemon  &>/dev/null
                if [ $? -eq 0 ];then
                    action "Rsync服务启动成功!"  /bin/true
                else
                    action "Rsync服务启动失败!"  /bin/false
                    rm -f $Pid  &>/dev/null
                    exit
                fi
            else
                action "Rsync没有运行....." /bin/true
                touch  $Pid  &>/dev/null && /usr/bin/rsync --daemon  &>/dev/null
                if [ $? -eq 0 ];then
                    action "Rsync服务启动成功!"  /bin/true
                else
                    action "Rsync服务启动失败!"  /bin/false
                    exit
                fi
            fi
            ;;
    status)
            if [ -f $Pid ];then
                action "Rsync服务正在运行....."  /bin/true
            else
                action "Rsync服务没有运行....."  /bin/true
            fi
            ;;
    *)
            echo "Usage: $0 {start|stop|restart|status}"
            exit
esac

23.nginx启动脚本

启动   /usr/sbin/nginx

停止  /usr/sbin/nginx   -s  stop

平滑重启  /usr/sbin/nginx   -s  reload    服务在运行才能平滑重启 

重启  restart     当ip地址改变  
[root@web /scripts/day05]# cat nginx.sh
#!/bin/bash
[ -f /etc/init.d/functions ]  &&  source /etc/init.d/functions

#加锁机制
suo=/opt/nginx.txt
if [ -f $suo ];then
    echo "此脚本正在使用......"
    exit
fi

if [ ! $USER == "root" -a ! $UID -eq 0 ];then
    echo "该用户$USER 对此脚本$0 没有执行权限"
    exit
fi
if [ $# -ne 1 ];then
    echo "请输入一个参数!"
    echo "Usage: $0 {start|stop|restart|status}"
    exit
fi
touch $suo  &>/dev/null
Pid=/var/run/nginx.pid
case $1 in
    start)
           if [ -f $Pid ];then
               action "Nginx服务正在运行......"  /bin/true
           else
               /usr/sbin/nginx  &>/dev/null
               if [ $? -eq 0 ];then
                   action "Nginx服务启动成功......"  /bin/true
               else
                   action "Nginx服务启动失败......" /bin/false
               fi
           fi
           ;;
    stop)
            if [ -f $Pid ];then
                /usr/sbin/nginx -s stop &>/dev/null
                if [ $? -eq 0 ];then
                    action "Nginx服务停止成功......"  /bin/true
                else
                    action "Nginx服务停止失败......"  /bin/false
                fi
            else
                action "Nginx服务没有运行......."  /bin/true
            fi
            ;;
    reload)
            if [ -f $Pid ];then
                /usr/sbin/nginx -s  reload  &>/dev/null
                if [ $? -eq 0 ];then
                    action "Nginx重载成功....."  /bin/true
                else
                    action "Nginx重载失败....."  /bin/false
                fi
            else
                action "Nginx服务没有运行!无法进行重载操作!"  /bin/false
            fi
            ;;
    status)
            if [ -f $Pid ];then
                action "Nginx服务正在运行......"  /bin/true
            else
                action "Nginx服务没有运行......"  /bin/true
            fi
            ;;
    restart)
            if [ -f $Pid ];then
                /usr/sbin/nginx -s stop &>/dev/null
                if [ $? -eq 0 ];then
                    action "Nginx服务停止成功....."  /bin/true
                else
                    action "Nginx停止失败....."  /bin/false
                fi
                sleep 3
                /usr/sbin/nginx &>/dev/null
                if [ $? -eq 0 ];then
                    action "Nginx服务启动成功......" /bin/true
                else
                    action "Nginx服务启动失败......"  /bin/false
                fi
            else
                action "Nginx服务没有运行....."  /bin/true
                /usr/sbin/nginx &>/dev/null
                if [ $? -eq 0 ];then
                    action "Nginx服务启动成功......" /bin/true
                else
                    action "Nginx服务启动失败......"  /bin/false
                fi
            fi
            ;;
    *)
            echo "Usage: $0 {start|stop|restart|status}"
esac

rm -f  $suo  &>/dev/null


高级版nginx启动脚本

[root@web /scripts/day05]# cat  nginx.sh 
#!/bin/bash
[ -f /etc/init.d/functions ]  &&  source /etc/init.d/functions

#加锁机制
suo=/opt/nginx.txt
if [ -f $suo ];then
    echo "此脚本正在使用......"
    exit
fi

if [ ! $USER == "root" -a ! $UID -eq 0 ];then
    echo "该用户$USER 对此脚本$0 没有执行权限"
    exit
fi
if [ $# -ne 1 ];then
    echo "请输入一个参数!"
    echo "Usage: $0 {start|stop|restart|status}"
    exit
fi
touch $suo  &>/dev/null
Pid=/var/run/nginx.pid
case $1 in
    start)
           if [ -f $Pid ];then
               action "Nginx服务正在运行......"  /bin/true
           else
               /usr/sbin/nginx -t  &>/dev/null
               if [  $? -eq 0 ];then
                    /usr/sbin/nginx  &>/dev/null
                    if [ $? -eq 0 ];then
                        action "Nginx服务启动成功......"  /bin/true
                    else
                        action "Nginx服务启动失败......" /bin/false
                    fi
                else
                    Err=/opt/nginx_err.log
                    /usr/sbin/nginx -t &>$Err
                    Nginx_Err_File=$(awk -F  '[ :]'  'NR==1{print $(NF-1)}'  $Err )
                    Nginx_Err_Line=$(awk -F  '[ :]'  'NR==1{print $NF}'  $Err )
                    echo "Nginx语法检查错误!在$Nginx_Err_File 文件中,在$Nginx_Err_Line 行。"
                    cat  $Err 
                    read -p "是否进入该文件进行修改[Y|N]:"  qr
                    case $qr  in
                        Y|Yes|yes|y)
                                    vim  +$Nginx_Err_Line $Nginx_Err_File
                                    /usr/sbin/nginx -t  &>/dev/null
                                    if [  $? -eq 0 ];then
                                        /usr/sbin/nginx  &>/dev/null
                                        if [ $? -eq 0 ];then
                                            action "Nginx服务启动成功....."  /bin/true
                                        else
                                            action "Nginx服务启动失败....."  /bin/false
                                        fi
                                    else
                                        echo "语法还是错误!继续加油修改!"
                                    fi
                                    ;;
                        N|No|no|n)
                                    echo "你选择自己手动修改!"
                                    ;;
                        *)
                                    echo "你输入的不正确,请输入[Y|N]。"
                    esac
               fi
           fi
           ;;
    stop)
            if [ -f $Pid ];then
                /usr/sbin/nginx -s stop &>/dev/null
                if [ $? -eq 0 ];then
                    action "Nginx服务停止成功......"  /bin/true
                else
                    action "Nginx服务停止失败......"  /bin/false
                fi
            else
                action "Nginx服务没有运行......."  /bin/true
            fi
            ;;
    reload)
            if [ -f $Pid ];then
                /usr/sbin/nginx -s  reload  &>/dev/null
                if [ $? -eq 0 ];then
                    action "Nginx重载成功....."  /bin/true
                else
                    action "Nginx重载失败....."  /bin/false
                fi
            else
                action "Nginx服务没有运行!无法进行重载操作!"  /bin/false
            fi
            ;;
    status)
            if [ -f $Pid ];then
                action "Nginx服务正在运行......"  /bin/true
            else
                action "Nginx服务没有运行......"  /bin/true
            fi
            ;;
    restart)
            if [ -f $Pid ];then
                /usr/sbin/nginx -s stop &>/dev/null
                if [ $? -eq 0 ];then
                    action "Nginx服务停止成功....."  /bin/true
                else
                    action "Nginx停止失败....."  /bin/false
                fi
                sleep 3
                /usr/sbin/nginx &>/dev/null
                if [ $? -eq 0 ];then
                    action "Nginx服务启动成功......" /bin/true
                else
                    action "Nginx服务启动失败......"  /bin/false
                fi
            else
                action "Nginx服务没有运行....."  /bin/true
                /usr/sbin/nginx &>/dev/null
                if [ $? -eq 0 ];then
                    action "Nginx服务启动成功......" /bin/true
                else
                    action "Nginx服务启动失败......"  /bin/false
                fi
            fi
            ;;
    *)
            echo "Usage: $0 {start|stop|restart|status}"
esac

rm -f  $suo  &>/dev/null
#!/bin/bash
[ -f /etc/init.d/functions ] && . /etc/init.d/functions

ZT=$1
PID=/var/run/nginx.pid
State () {
    if [ $? -eq 0 ];then
        action "nginx 服务 $ZT 成功" /bin/true
    else
        action "nginx 服务 $ZT 失败" /bin/false
    fi
}
Start () {
    if [ -f $PID ];then
        action "nginx 启动中" /bin/true
    else
        /usr/sbin/nginx &>/dev/null
        ZT=start
        State
    fi
}
Stop () {
    if [ -f $PID ];then
        action "nginx 启动失败" /bin/true
    else
        /usr/sbin/nginx -s stop &>/dev/null
        ZT=stop
        State
    fi
}
Reload ()  {
    if [ -f $PID ];then
        action "nginx 启动中" /bin/true
    else
        /usr/sbin/nginx -s reload &>/dev/null
        echo "正在加载中"
    fi
}
Status () {
    if [ -f $PID ];then
        action "nginx 启动中" /bin/true
    else
        action "nginx 没启动" /bin/false
    fi
}
case $ZT in
    start)
        Start
        State
        ;;
    stop)
        Stop
        State
        ;;
    restart)
        Stop
        sleep 2
        Start
        ;;
    status)
        Status
        ;;
    *)
        echo "你输入的不对!"
        exit
esac

相关文章

网友评论

      本文标题:shell练习题

      本文链接:https://www.haomeiwen.com/subject/qbvebctx.html