shell脚本

傻男人 1年前 ⋅ 544 阅读

shell脚本

一、 Ping一个网段的所有IP,并检测网络连接状态是否正常

获取 172.16.20.130到172.16.20.140之间ip

#!/bin/sh
# Ping网段所有IP
ip="192.168.13."
for i in `seq 130 140`
do
ping -c 2 $ip$i | grep -q 'ttl=' && echo "$ip$i success"|| echo "$ip$i fail"
#yes正常,no主机不存在或不正常
done

二、 判断网络是否流畅

#检测网络链接畅通
function network()
{
    #超时时间
    local timeout=1
    #目标网站
    #网站如果是https需要加上
    local target=https://andoudou.top
    #获取响应状态码
    local ret_code=`curl -I -s --connect-timeout ${timeout} ${target} -w %{http_code} | tail -n1`
    if [ "x$ret_code" = "x200" ]; then
        #网络畅通
        return 1
    else
        #网络不畅通
        return 0
    fi
    return 0
}
network
if [ $? -eq 0 ];then
        echo "网络不畅通,请检查网络设置!"
        exit -1
fi
echo "网络畅通,你可以上网冲浪!"
exit 0

三、 根据文件中的用户名信息创建用户

lslogins 查看系统中所有的用户信息

准备文件user.txt 添加内容:

user001
user002
user003

脚本内容

#!/bin/bash
# 使用 user.txt 文件中的人员名单,在计算机中自动创建对应的账户并配置初始密码
# 本脚本执行,需要提前准备一个 user.txt 文件,该文件中包含有若干用户名信息
for i in `cat user.txt`
do
        useradd  $i
        echo "123456" | passwd ‐‐stdin $i
done

查看系统中所有的用户信息,会在列表中出现文件中的用户信息 lslogins

四、点名器

#!/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
exit
done

五、统计某个文件下有多少个文件并显示这些文件名

# 统计/var/log 有多少个文件,并显示这些文件名
cd  /var/log
sum=0
for i in `ls -r *`
do
        if [ -f $i ];then
        let sum++
        echo "文件名:$i"
        fi
done
echo "总文件数量为:$sum"

六、检测 MySQL 服务的状态

#!/bin/bash
# 检测 MySQL 服务的状态 
host=192.168.13.138
user=root
passwd=123456
mysqladmin -h '$host' -u '$user' -p'$passwd' ping &>/dev/null
if [ $? -eq 0 ]
then
        echo "MySQL is UP"
else
        echo "MySQL is down"
fi

七、备份 MySQL 数据库

# 备份 MySQL 的 shell 脚本
 
# 定义变量 user(数据库用户名),passwd(数据库密码),date(备份的时间标签)
# dbname(需要备份的数据库名称,根据实际需求需要修改该变量的值,默认备份 mysql 数据库)
 
user=root
passwd=123456
dbname=mysql
date=$(date +%Y%m%d)
 
# 测试备份目录是否存在,不存在则自动创建该目录
[ ! -d /mysqlbackup ] && mkdir /mysqlbackup
# 使用 mysqldump 命令备份数据库
mysqldump -u "$user" -p "$passwd" "$dbname" > /mysqlbackup/"$dbname"-${date}

八、自动添加防火墙规则

# 使用 firewall‐cmd ‐‐get‐services 可以查看 firewall 支持哪些服务
service="nfs http ssh"
port="80 22 8080 8082"

# 循环将每个服务添加到防火墙规则中
for i in $service
do
        echo "添加 $i 服务到防火墙"
        firewall-cmd  --add-service=${i}
done

#循环将每个端口添加到防火墙规则中
for i in $port
do
        echo "添加 $i 端口到防火墙"
        firewall-cmd --add-port=${i}/tcp
done
#将以上设置的临时防火墙规则,转换为永久有效的规则(确保重启后有效)
firewall-cmd  --runtime-to-permanent

删除某个目录下文件大小为0的文件

#./aaa 为测试目录,脚本会清空该目录下所有 0 字节的文件
dir="./aaa"
find $dir -type f -size 0 -exec rm -rf {} \;

九、打印可以能登录的用户

# 找出能登录的用户,并将对应在/etc/shadow 中第二列密码提出处理

user=$(awk -F: '/bash$/{print $1}' /etc/passwd)
for i in $user
do
        awk -F: -v x=$i '$1==x{print $1,$2}' /etc/shadow
done

十、统计Linux进程相关数量信息

# 统计 Linux 进程相关数量信息 
running=0
sleeping=0
stoped=0
zombie=0
# 在 proc 目录下所有以数字开始的都是当前计算机正在运行的进程的进程 PID
# 每个 PID 编号的目录下记录有该进程相关的信息
for pid in /proc/[1‐9]*
do
  procs=$[procs+1]
  stat=$(awk '{print $3}' $pid/stat)
# 每个 pid 目录下都有一个 stat 文件,该文件的第 3 列是该进程的状态信息
    case $stat in
    R)
    running=$[running+1]
    ;;
    T)
    stoped=$[stoped+1]
    ;;
    S)
    sleeping=$[sleeping+1]
    ;;
    Z)
     zombie=$[zombie+1]
     ;;
    esac
done
echo "进程统计信息如下"
echo "总进程数量为:$procs"
echo "Running 进程数为:$running"
echo "Stoped 进程数为:$stoped"
echo "Sleeping 进程数为:$sleeping"
echo "Zombie 进程数为:$zombie"

十一、打印各种时间格式

echo "显示星期简称(如:Sun)"
date +%a
echo "显示星期全称(如:Sunday)"
date +%A
echo "显示月份简称(如:Jan)"
date +%b
echo "显示月份全称(如:January)"
date +%B
echo "显示数字月份(如:12)"
date +%m
echo "显示数字日期(如:01 号)"
date +%d
echo "显示数字年(如:01 号)"
date +%Y echo "显示年‐月‐日"
date +%F
echo "显示小时(24 小时制)"
date +%H
echo "显示分钟(00..59)"
date +%M
echo "显示秒"
date +%S
echo "显示纳秒"
date +%N
echo "组合显示"
date +"%Y%m%d %H:%M:%S"

全部评论: 0

    我有话说: