shell脚本每日练习

本文介绍了几个实用的Linux基础运维脚本,包括文件备份、批量创建用户、检测磁盘挂载点和权限设置、创建软链接、监控系统负载、查找文件变动以及站点访问状态检查。
摘要由CSDN通过智能技术生成
day01 备份文件

写一个脚本遍历目录下文件

并且将这些文件做一个备份

将备份的文件增加一个年月日的后缀 例如将a.txt备注为a.txt_20040411

#!/bin/bash 
hz=`date +%Y%m%d`
for i in `find  /date/ -type f -name "*.txt"`
do
echo "copy_files${i}"
cp ${i} ${i}_${hz}
done
day02 批量创建用户

创建十个用户并且设置随机的密码

密码要求包含大小写字母以及数字密码长度15位

#可以使用mkpasswd去创建用户随机密码 记录在/tmp/userinfo.txt
#用户名可以用seq队列去生成
#passwd --stdin user_${i} 可以在创建user密码时只输入一次密码

#!/bin/bash 
#先验证是否有密码文件和mkpasswd工具
if [ -f /tmp/userinfo.txt ]
then
        rm -rf /tmp/userinfo.txt
fi

if ! which  mkpasswd
then
        yum -y install expect
fi
#生成00到09 10个数字的队列
for i in `seq -w 0 09`
do
p=`mkpasswd -l 15 -s 0`
useradd user_${i} && echo "${p}"| passwd --stdin user_${i}
echo "user_${i}  ${p}" >> /tmp/userinfo.txt
done

day03 磁盘检测脚本
#检测各个挂载点和分区是否正常可以创建和删除文件
#我们可以先将所有的挂载目录取出然后遍历
#然后在挂载目录下面创建并且删除文件以测试健康状况是否良好

#示例代码
#!/bin/bash 
#测试脚本 测试磁盘挂载点是否健康
#找到所有的挂载目录
mount_vlous=`df | sed '1d' |grep -v 'tmpfs'|awk '{print $NF}'`
#开始遍历
for i  in ${mount_vlous}
do
        touch ${i}/testfile && rm -rf ${i}/testfile
        if [ $? -ne 0 ]
        then echo '磁盘挂载存在问题'
        else  echo '磁盘挂载状况健康'
        fi
done
#值得注意的是此处的-ne代指不等于 
day04 检查文件目录权限是否符合
#检查文件权限是否复合以下条件
<<COMMENT
所有文件的权限是644
所有目录的权限是755
文件和目录所有者为www所属组是root
COMMENT

#示例代码

#!/bin/bash
cd /data/test/
# 遍历当前文件夹下面所有文件和目录
for i in $(find .)
do
    f_p=$(stat -c %a "$i")
    f_u=$(stat -c %U "$i")
    f_g=$(stat -c %G "$i")
    # 判断是否为目录
    if [ -d "$i" ]; then
        [ "$f_p" = '755' ] || chmod 755 "$i"
    else
        [ "$f_p" = '644' ] || chmod 644 "$i"
    fi

    # 判断当前文件夹下所有文件和目录是否属于www用户和root用户组
    [ "$f_u" = 'www' ] || chown www "$i"
    [ "$f_g" = 'root' ] || chown :root "$i"
done



#关键知识总结 
#查看文件权限 stat  -c %a 1.txt 
#查看文件所属组         %G 
#查看文件所有者         %U
day05 备份文件并且添加软链接
#一个老的文件夹已经满了,新的同类文件存储在一个新的地址,并且将老的文件全部移动到新的文件中去但有些环境变量不易更改,然后还用老的文件地址,需要创建软连接,依旧可以通过老地址访问文件。

#!/bin/bash 
main()
{
cd /data/test/

for dir in `ls`
do
  for dir2 in `find $dir -maxdepth 1 -type d `
do
   if ! which rsync
        then yum -y install rsync
   fi
        rsync -aR $dir2/  /data1/test/
if [ $? -eq 0 ]
then
    rm -rf $dir2
        echo "/data/test/$dir2 move successfuly"
        ln -s  /data1/test/$dir2 /data/test/$dir2 $$ \
        echo "/data/test/$dir2 create ln"
else
        echo "/data/test/$dir not move "
        fi
        done
done
}

main &> /tmp/move_old_data_`date +%F`.log

day06 监控系统负载
#系统负载命令使用uptime查看,过去一分钟的平均负载 负载超过10就记录
#系统状态使用如下工具标记:top、vmstat、ss
#要求每隔20s监控一次
#输出到/opt/logs下面,文件保留一个月标记明白日期

#!/bin/bash
[ -d /opt/logs ] || mkdir -p /opt/logs
while : 
do
        load=`uptime | awk -F 'average:' '{print $2}'|cut -d',' -f1|sed 's/  //g' |cut -d'.' -f1`
        if [ $load -gt 10 ]
        then
                top -bn1 |head -n 100 > /opt/logs/top.`date +%s`
                vmstat 1 10 > /opt/logs/vmstat.`date +%s`
                ss -an > /opt/logs/ss.`date +%s`
        fi
        sleep 20
        find /opt/logs \( -name "top*" -o -name "vmstat*" -o -name "ss*" \) -mtime +30 |xargs rm -f
#        find /opt/logs \( -name "top*" -o -name "vmstat*" -o -name "ss*" \) -mtime +30 | xargs rm -f

done


day07 找五分钟内更改过的文件
#找五分钟内更改过的文件将其写入文件中,并且用时间戳作为文件名字
#!/bin/bash
da=`date +%Y%m%d%H%M`
dir=/data/test
find $dir/ -type f -mmin -5 > /tmp/newfiles.txt
if [ -s /tmp/newfiles.txt ];then
        mv /tmp/newfiles.txt /tmp/$da
fi

day08 菜单脚本
#输入一个数字会运行对应的一个命令
#1-date 2-ls  3-who 4-pwd
#continue可写可不写
#!/bin/bash
while :
do
        read -p "please input number 1-4(5 is exit)" n
        case $n in
        1)
                date
                continue
                ;;
        2)
                ls
                continue
                ;;
        3)
                who
                continue
                ;;
        4)
                pwd
                continue
                ;;
        5)
                break
                ;;
        *)
                echo "wrong you input is not"
                ;;
esac
day09 输入数字
#要求用户输入数字然后打印数字值 然后再次要求用户输入数值 知到用户输入end
#!/bin/bash 
while :
do
        read -p 'please write you want a number(input end is exit)' n
num=`echo $n |sed -r 's/[0-9]//g'|wc -c`
if [ $n == "end" ]
then
        exit
fi
if [ $num -eq 1 ]
then
 echo "you write is correct "
else
echo "you write is error ,please try again"
fi
done

day10 监控站点访问状态
#编写一个系统监控脚本 监控站点访问是否正常
#状态码为2xxor3xx为正常状态
#!/bin/bash

# 检查是否安装了 curl,如果没有则尝试安装
if ! which curl &> /dev/null; then
    echo "curl is not installed"
    yum -y install curl
    if [ $? -ne 0 ]; then
        echo "Failed to install curl"
        exit 1
    fi
fi

# 检测传递的参数数量,如果不是一个则输出错误信息并退出
if [ $# -ne 1 ]; then
    echo "Usage: $0 <URL>"
    exit 1
fi

# 使用 curl 获取 URL 的状态码
code=$(curl --connect-timeout 3 -I $1 2>/dev/null | grep 'HTTP' | awk '{print $2}')

# 判断状态码是否为 2xx 或 3xx,如果是则输出访问正常的消息,否则输出访问异常的消息
if echo $code | grep -qE '^(2[0-9][0-9]|3[0-9][0-9])'; then
    echo "$1 check is ok"
else
    echo "$1 check is not ok"
fi


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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值