shell脚本基础练习

文章详细描述了一系列在Linux命令行中执行的操作,包括用户管理(创建、删除、检查),文件操作(如检查文件、创建目录),网络检查(ping、端口使用)、成绩评估、计数、安装配置nginx、监控系统状态、随机密码生成、文本处理、网站搭建、用户权限管理、FTP服务控制、数据备份和时间同步等。
摘要由CSDN通过智能技术生成

目录

1.在命令行创建用户以及删除密码

2. 命令行提示创建用户以及密码

3.每两分钟检查系统用户数量,如有添加立即发邮件报告

4. 创建用户时未输入两个参数自动退出

5.查看文件是否有/haha,有喊ok,没有则创建

6.ping通喊OK,没ping通喊no

7.成绩优秀90-100,良好80-89  及格60-79  不及格0-59

8.帮客户计算(限加)

9.m创建;r删除;l查看

10.安装源码包nginx

11.nginx并启动服务

12.利用函数修改颜色

13.随机密码

14.批量修改txt

15.使用默认密码创建用户

16.搭建网站,使用82端口,使用82号端口,定义主页内容是sed-test~

17.查找解析器是bash的用户并列出密码记录(账户名-->密码记录)

18.编写监控脚本

19.系统初始化

20.批量创建用户和密码

21.自动获取linux密码并设置

22.制作菜单,控制vsftpd服务

23.备份数据/var/www/html 里面除了.tmp类型的所有文件到/opt/backup_data;备份文件要带时间戳,打tar包,格式为web_file_年-月-日.tar.gz;如果/opt/backup_data中备份的tar包凑齐5个之后,就都上传到ftp中并删除本地的这些tar包;任务执行成功或失败都要给出提示信息

24.编写监控脚本使用函数改变颜色


1.在命令行创建用户以及删除密码

#!/bin/bash
#创建用户
useradd $1
echo  $2 | passwd --stdin $1

2. 命令行提示创建用户以及密码

#!/bin/bash
#创建用户
read -p 请创建用户名:  u
useradd $u
stty -echo
read -p 请输入密码:   m
echo  $m | passwd --stdin $u
stty echo

3.每两分钟检查系统用户数量,如有添加立即发邮件报告

#!/bin/bash
#每两分钟检查系统用户数量,如有添加立即发邮件报告
a=$(cat /etc/passwd | wc -l)
if [ $a -gt 47 ];then
        echo 有用户添加立即查看服务器 | mail -s test root
else
        echo ok
fi

4. 创建用户时未输入两个参数自动退出

#!/bin/bash
#未输入两个参数自动退出
if [ $# -lt 2 ];then
        echo 创建时需要输入账号与密码
        exit
fi
useradd $1
echo $2 | passwd --stidn $1

5.查看文件是否有/haha,有喊ok,没有则创建

#!/bin/bash
#查看文件是否有/haha,有喊ok,没有则创建
a="haha"
if [ -d haha ];then
        echo ok
else
        mkdir $a
fi

6.ping通喊OK,没ping通喊no

#!/bin/bash
#ping通喊OK,没ping通喊no
for i in {1..10}
do
        ping -c 2 -i 0.1 -w 0,1 192.168.88.$i  &> /dev/null
        if [ $? -eq 0 ];then
                echo ok $i
                let a+=1
        else
                echo no $i
                let b+=1
        fi
done
echo ping通  $a
echo ping不通 $b

7.成绩优秀90-100,良好80-89  及格60-79  不及格0-59

#!/bin/bash
#成绩优秀90-100,良好80-89  及格60-79  不及格0-59
read -p 这次考试如何 u
if [ $u -ge 90 ] && [ $u -le 100 ];then
        echo 优秀
elif
        [ $u -ge 80 ] && [ $u -le 89 ];then
        echo 良好
elif
        [ $u -ge 60 ] && [ $u -le 79 ];then
        echo 及格
elif
        [ $u -ge 0 ] && [ $u -le 59 ];then
        echo 不及格
fi

8.帮客户计算(限加)

#!/bin/bash
#帮客户计算(限加)
x=0
while :
do
        read -p "输入数字(0结束并算出结果)"  u
        [ -z $u ] && continue
        echo "$u" | grep  -q "[^0-9]"  && continue
        [ $u -eq 0 ] && break
        let x+=u
done
echo $x

9.m创建;r删除;l查看

#!/bin/bash
#m创建;r删除;l查看
case $1 in
        r)
                rm -rf  $2  ;;
        m)
                mkdir  $2  ;;
        l)
                ls  $2 ;;
esac

10.安装源码包nginx

#!/bin/bash
yum -y install gcc make pcre-devel openssl-devel
tar -xf nginx-1.22.1.tar.gz
cd nginx-1.22.1
./configure
make
make install

11.nginx并启动服务

#!/bin/bash
#安装nginx并启动服务
case $1 in
        start|st)
                /usr/sbin/nginx;;
        stop|so)
                /usr/sbin/nginx -s stop;;
        restart|sp)
                /usr/sbin/nginx -s stop
                /usr/sbin/nginx ;;
        stauts|ss)
                ss -tunlp  | grep  nginx    &>  /dev/null
                [ $? -eq 0 ] && echo 正在运行 || echo 没有运行 ;;
                *)
                echo "别闹请输入st/so/sp"
esac
#!/bin/bash
#源码包使用nginx
case $1 in
        start|st)
                /usr/local/nginx/sbin/nginx;;
        stop|so)
                /usr/local/nginx/sbin/nginx -s stop;;
        restart|sp)
                /usr/local/nginx/sbin/nginx -s stop
                /usr/local/nginx/sbin/nginx;;
        status|ss)
                ss -ntulp | grep -q nginx
                [ $? -eq 0 ] && echo nginx正在运行  || echo nginx 没运行;;
        *)
                echo 必须输入start stop
esac

12.利用函数修改颜色

#!/bin/bash
#利用函数修改颜色
a () {
        echo -e "\033[$1m$2\033[0m"
}
case $1 in
        start|st)
                /usr/sbin/nginx;;
        stop|so)
                /usr/sbin/nginx -s stop;;
        restart|sp)
                /usr/sbin/nginx -s stop
                /usr/sbin/nginx ;;
        stauts|ss)
                ss -tunlp  | grep  nginx    &>  /dev/null
                if [ $? -eq 0 ];then
                        a 033  正在运行
                else
                        a 034  没有运行
                fi;;
                *)
                echo "别闹请输入st/so/sp"
esac

13.随机密码

#!/bin/bash
#随机密码
a=1234567890qwertyuiopasdfghjklzxcvbnmQWERTYUIOPASDFGHJKLZXCVBNM
pass=
for i in {1..8}
do
        n=$[RANDOM%62]
        p=${a:n:1}
        pass+=$p
done
echo $pass

14.批量修改txt

#!/bin/bash
#批量修改txt
for i in $(ls *.txt)
do      
        n=${i%.*}
        mv $i $n.doc
done 

15.使用默认密码创建用户

#!/bin/bash
#使用默认密码创建用户
read -p 请创建用户 u
useradd $u
read -p "请输入密码(默认123)" n
echo ${n:-123} | passwd --stdin $u

16.搭建网站,使用82端口,使用82号端口,定义主页内容是sed-test~

#!/bin/bash
搭建网站,使用82端口,使用82号端口,定义主页内容是sed-test~
yum -y remove httpd
re -rf /etc/httpd
setenforce 0
systemctl stop firewalld
yum -y install httpd  &> /dev/null
sed  -i  '/^Listen 80/s/0/2'   /etc/httpd/conf/httpd.conf
echo sed-test~  >   /var/www/html/index.html
systemctl start httpd
systemctl enable httpd

17.查找解析器是bash的用户并列出密码记录(账户名-->密码记录)

#!/bin/bash
#查找解析器是bash的用户并列出密码记录(账户名-->密码记录)
a=$(sed -n '/bash$/s/:.*//p' /etc/passwd)
for i in $a
do
        pass=$(grep $i /etc/shadow)
        pass=${pass#*:}
        pass=${pass%%:*}
        echo "$i --> $pass"
done

18.编写监控脚本

#!/bin/bash
#编写监控脚本
while :
do
clear
        clear
        free -h | awk '/^Men/{print "剩余内存"$4"容量"}'
        ifconfig eth0 | awk '/TX p/{print "网卡的发送数据量"$5"字节"}'
        uptime | awk '{print "15分子CPU平均负载" $NF}'
        awk 'END{print "用户总数是"NR"个"}'  /etc/passwd
        who | awk 'END{print "登录用户数量是"NR"个"}'
        rpm -qa | awk 'END{print "安装的软件包数量是"NR"个"}'
        df -h | awk  '/\/$/{print "根分区剩余容量是"$4}'
        sleep 3
done

1.81.编写监控脚本使用函数改变颜色

#!/bin/bash
#编写监控脚本
a () {
        echo -e "\033[$1m$2\033[0m"
}
while :
do
        clear
        a 30  ` uptime | awk '{print "每十五分钟cpu负载"$NF}'`
        a 31  ` ifconfig eth0 | awk '/RX p/{print "eth0网卡接受量"$5"字节"}'`
        a 32 `ifconfig eth0 | awk '/TX p/{print "eth0网卡发送量"$5"字节"}'`
        a 33 `free -h | awk '/Mem/{print "剩余内存"$4}'`
        a 34 ` df -h | awk '/\/$/{print "根剩余容量"$4}'`
        a 35 ` awk 'END{print "一共有"NR"用户"}'  /etc/passwd`
        a 36 `who | awk 'END{print "登陆用户数量"NR}'`
        a 37 ` rpm -qa | awk 'END{print "一共有"NR"安装包"}'`
        sleep 5
done

19.系统初始化

#!/bin/bash
#所有服务器永久关闭防火墙服务和SELinux
#关闭7版本系统的命令历史记录,修改8版本的命令历史记录最多保存2000条并加上时间戳
#关闭8版本系统的交换分区
#定义root远程登录系统后的ssh保持时间为300秒
#设置时间同步,ntp服务器地址是192.168.88.240
#1)判断当前账户身份,并关闭防火墙与selinux
[ $UID -ne 0 ] && echo "请使用管理员操作" && exit
systemctl stop firewalld
systemctl disable firewalld
setenforce 0
sed -i 's/SELINUX=enforcing/SELINUX=disabled/' /etc/selinux/config

#2)根据不同版本的系统执行各自的任务
egrep -q "\s+8\.[0-9]" /etc/redhat-release                 
if [ $? -ne 0 ];then
    sed -ri 's/HISTSIZE=[0-9]+/HISTSIZE=0/' /etc/profile     
else
    sed -ri 's/HISTSIZE=[0-9]+/HISTSIZE=2000/' /etc/profile   
    sed -i '/^export /i HISTTIMEFORMAT="%F %T "' /etc/profile  
    sed -i '/^export /s/$/ HISTTIMEFORMAT/' /etc/profile   
    swap=$(swapon | awk 'NR!=1{print $1}')      
    for i in $swap
    do
        swapoff $i        
    done
    sed -i '/swap/s/^/#/' /etc/fstab     
fi

#3)最后所有机器设置ssh超时时间与时间同步
echo "export TMOUT=300"  >> ~/.bash_profile   
yum -y install chrony
systemctl enable chronyd
sed  -ri  '/^(pool|server).*iburst/s/^/#/'   /etc/chrony.conf
sed  -i  '1i server 192.168.88.240 iburst'   /etc/chrony.conf
systemctl restart chronyd

20.批量创建用户和密码

vim user.txt  ----(先创建文档)
研发部
zhangsan haha123
人事部
lisi xixi456
wangwu lele789
销售部
zhaoliu kaka765
#!/bin/bash
#批量创建用户和密码
while read  name pass
do      
        [ -z $pass ] && continue
        useradd $name
        echo $pass | passwd --stdin $name
done  < user.txt

21.自动获取linux密码并设置

#!/bin/bash
#自动获取linux密码并设置
x=$(awk  '/^[a-zA-z0-9]/&&!/已创建/{print NR}' user.txt)
if [ -z "$x" ];then
        echo "没有账户需要创建"
        column -t user.txt
        exit
fi
for i in $x
do
        pass=$(strings /dev/urandom | tr -cd '_a-zA-Z0-9' | head -c 10)
        sed -i "${i}s/$/\t$pass/" user.txt
        read -p name passwd << EOF
        $(sed -n "${i}p" user.txt)
EOF
        useradd $name
        echo $pass | passwd --stdin $name
        sed -i "${i}s/$/\t已创建/"  user.txt
done
column -t user.txt

22.制作菜单,控制vsftpd服务

(1) 制作菜单menu(不需要.sh)

x=1
y=0
menu () {
        clear
        for i in 1,安装ftp服务 2,开关ftp服务 3,退出
        do
                echo "-----------------"
                let y++
                [ $x -eq $y ] && echo -e "\033[42;91m$i\033[0m" && continue
                echo "$i"
        done
        y=0
        echo "-----------------"
}

(2) 可动菜单ftp.sh

#!/bin/bash
. menu
while :
do
        menu
        read  -n 3 c
        if [ "$c" == $'\033[A' ];then
                [ $x -eq 1 ] && continue
                let x--
        elif
                [ "$c" == $'\033[B' ];then
                [ $x -eq 3 ] && continue
                let x++
        fi
done

(3)创建ftp安装函数文件ftp_install(不需要.sh)

ftp_install () {
        if rpm -q vsftpd &> /dev/null;then
                msg="ftp已经安装"
        else
                yum -y install vsftpd &> /dev/null
                [ $? -eq 0 ] && msg="ftp安装成功"  || msg="ftp安装失败"
        fi
}

(4)重新编辑“可动菜单”,把“ftp软件包安装查询”文件添加进入

#!/bin/bash
. menu
. ftp_install
while :
do
        menu
        echo "$msg"
        read  -n 3 c
        if [ "$c" == $'\033[A' ];then
                [ $x -eq 1 ] && continue
                let x--
        elif
                [ "$c" == $'\033[B' ];then
                [ $x -eq 3 ] && continue
                let x++
        elif
                [ $x -eq 1 ] && [ -z "$c" ];then
                msg="ftp正在安装中。。。"
                echo "$msg"
                ftp_install
        fi
done

(5)创建服务管理函数文件ser_manager

ser_manager () {
        if ! rpm -q vsftpd &> /dev/null;then
                msg="未安装ftp软件包"
                return
        fi
        case $1 in
                start)
                        systemctl start vsftpd
                        msg="ftp服务已经开启"
                        ser_manager=start;;
                stop)
                        systemctl stop vsftpd
                        msg="ftp服务已经关闭"
                        ser_manager=stop;;
        esac
}

(6) 重新编辑“可动菜单”,把“ftp服务管理添加进入

#!/bin/bash
. menu
. ftp_install
. ser_manager
while :
do
        menu
        echo "$msg"
        read  -n 3 c
        if [ "$c" == $'\033[A' ];then
                [ $x -eq 1 ] && continue
                let x--
        elif
                [ "$c" == $'\033[B' ];then
                [ $x -eq 3 ] && continue
                let x++
        elif
                [ $x -eq 1 ] && [ -z "$c" ];then
                msg="ftp正在安装中。。。"
                echo "$msg"
                ftp_install
        elif
                [ $x -eq 2 ] && [ -z "$c" ];then
                [ "$ser_manager" != "start" ] && ser_manager start  || ser_manager stop
        elif
                [ $x -eq 3 ] && [ -z "$c" ];then
                exit
        fi
done

23.备份数据/var/www/html 里面除了.tmp类型的所有文件到/opt/backup_data;备份文件要带时间戳,打tar包,格式为web_file_年-月-日.tar.gz;如果/opt/backup_data中备份的tar包凑齐5个之后,就都上传到ftp中并删除本地的这些tar包;任务执行成功或失败都要给出提示信息

#!/bin/bash
#1.备份数据/var/www/html 里面除了.tmp类型的所有文件到/opt/backup_data
#2.备份文件要带时间戳,打tar包,格式为web_file_年-月-日.tar.gz
#3.如果/opt/backup_data中备份的tar包凑齐5个之后,就都上传到ftp中并删除本地的这些tar包
#4.任务执行成功或失败都要给出提示信息
sou_path=/var/www/html
tar_path=/opt/backup_data
date=$(date +%Y-%m-%d)
ex_file=*.tmp

tar -zcf ${tar_path}/web_file_${date}.tar.gz --exclude=$ex_file  ${sou_path}

file_total=$(ls ${tar_path} | wc -l)
echo "${date}的文件已打tar包放入${tar_path},目前备份文件总数是${file_total}个"


if [ $file_total -ge 5 ];then
        lftp 192.168.99.6 << EOF
        cd pub
        mput  -q   ${tar_path}/*
        quit
EOF
        if [ $? -ne 0 ];then
              echo "上传失败"
        else
              echo "上传成功"
              rm -rf ${tar_path}/web_file*
        fi
fi

 

  • 24
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值