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"
注意:本文归作者所有,未经作者允许,不得转载