shell
1、检查Mysql的健康状态
#!/bin/bash
pgrep -x mysqld &> /dev/null
if [ $? -ne 0 ]
then
echo “At time: `date` :MySQL is stop .”>> /日志路径
/etc/init.d/mysqld start
else
echo “MySQL server is running .”
fi
2、Nginx-日志切割
#!/bin/bash
3、判断/tmp/run目录是否存在,如果不存在就建立,如果存在就删除目录里所有文件
#!/bin/bash
dir=/tmp/run
[ -f $dir ] && mv $dir $dir.bak
[ -d $dir ] && rm -rf $dir/* || mkdir $dir
4、 输入一个文件的绝对路径,判断路径是否存在,而且输出是文件还是目录,如果是字符连接,还得输出是有效的连接还是无效的连接
#!/bin/bash
read -p "Input a path:" path
if [ -L $path -a -e $path ];then
echo "this is effective link"
elif [ -L $path -a ! -e $path ];then
echo "this is not effective link"
elif [ -d $path ];then
echo "this is a director"
elif [ -f $path ];then
echo "this is file"
elif [ -e $path ];then
echo "this is a other type file"
else
echo "the file is not exist"
fi
##5、交互模式要求输入一个ip,然后脚本判断这个IP 对应的主机是否 能ping 通,输出结果类似于:
Server 10.1.1.20 is Down! 最后要求把结果邮件到本地管理员root@localhost和mail01@localhost
方法一:
#!/bin/bash
read -p "输入IP地址:" ip
ping -c 2 $ip > /dev/null 2>&1
if [ $? -eq 0 ];then
echo "Server $ip is OK. " |mail -s 'check server' root@localhost
else
echo "Server $ip is Down!" |mail -s 'check server' root@localhost
fi
方法二:
#!/bin/bash
read -p "Input your ip:" ip
ping -c 1 $ip &>/dev/null
[ $? -eq 0 ] && echo "server $ip is ok"|mail -s "check server" root@localhost || echo "server $ip is down" |mail -s "check server" root@localhost
方法三:
#!/bin/bash
tmpfile=`mktemp`
mailaddr="root@localhost mail@localhost"
read -p "输入IP地址:" ip
ping -c 2 $ip > /dev/null 2>&1
if [ $? -eq 0 ];then
echo "Server $ip is Up! " >> $tmpfile
else
echo "Server $ip is Down!" >> $tmpfile
fi
cat $tmpfile
mail -s "ping server" $mailaddr < $tmpfile
rm -rf $tmpfile
方法四:
#!/bin/bash
rootmail="root@localhost"
tmpfile=`mktemp`
read -p "Input a ip : " ip
ping -c 1 "$ip" &>/dev/null
retval=$?
if [ $retval -eq 0 ];then
echo "Server $ip is up" > $tmpfile
else
echo "Server $ip is down" > $tmpfile
fi
cat $tmpfile
mail -s "ping result" $rootmail < $tmpfile
rm -rf $tmpfile
6、自动搭建NFS服务
#!/bin/bash
7、将/etc/passwd里的用户名分类,分为管理员用户,系统用户,普通用户
-
分析:
根据用户的uid来判断用户种类 2.用户的信息保存在/etc/passwd文件中,需要在该文件中获取UID 3.根据用户的uid去判断 管理员:root 0 统用户:1-499 ftp apache ... 65534 nfsnobody 普通用户:500-60000
#!/bin/bash
for i in `cat /etc/passwd|cut -d: -f1,3`
do
uid=`echo $i |cut -d: -f2`
name=`echo $i |cut -d: -f1`
[ $uid -eq 0 ] && echo $name >>/tmp/adminuser
[ $uid -gt 0 -a $uid -lt 500 -o $uid -eq 65534 ] && echo $name >>/tmp/systemuser
[ $uid -ge 500 -a $uid -ne 65534 ] && echo $name >>/tmp/normaluser
done
8、写一个倒计时脚本,要求显示离2018年10月1日(国庆节)的凌晨0点,还有多少天,多少时,多少分,多少秒。
-
分析
-
该脚本应该是一个死循环,除非当前系统时间等于10月1日的凌晨0点,要退出循环,并且打印国庆快乐 break
-
计算未来时间(10月1日的凌晨0点)和当前系统时间的时间差 时间单位相同并且以相同的时间为一个基准 需要定义2个变量: 现在时间和未来时间 date命令 -d %
9、写一个脚本把一个目录内的所有空文件都删除,最后输出删除的文件的个数。
-
分析:
-
如何判断文件是空文件 -s 判断文件内容为非空;判断空文件则 ! -s eg:[ ! -s file ]
-
定义一个变量count=0来保存删除文件的个数,掌握四则运算 let count++ . 交互式定义变量让用户自己决定清理哪个目录 /data/logs/ 10个文件 循环次数由目录里的文件个数决定
#!/bin/bash
read -p "输入一个你要删除空文件的目录:" dir
count=0
for i in `find $dir -type f`
do
[ ! -s $i ] && rm -rf $i && let count++
10、写一个自动检测磁盘使用率的脚本,当磁盘使用空间达到90%以上时,需要发送邮件给相关人员
方法一:
#!/bin/bash
11、写一个脚本监控系统内存和交换分区使用情况
方法一:
#!/bin/bash
OIFS=$IFS 初始化默认分隔符
IFS="\n" 定义默认分隔符
file=`free -m|sed -nr '/Mem|Swap/p'|awk '{print $4,$2}'`
mem=`echo $file|head -1`
swap=`echo $file|tail -1`
echo $mem |awk '{if(($1/$2)*100<=50) print "物理内存空间需要留意,剩余"$1"M";else print "物理内存在正常范围"}'
echo $swap |awk '{if(($1/$2)*100<=50) print "交换空间需要留意,剩余"$1"M";else print "交换空间在正常范围"}'
方法二:
#!/bin/bash
12、输入一个IP地址,使用脚本判断其合法性:必须符合ip地址规范,第1、4位不能以0开头,不能大于255不能小于0
1. 必须符合ip地址规范,第1、额、4位不能以0开头,不能大于255不能小于0
#!/bin/bash
read -p "请输入IP地址:" IP
13、FTP服务
仅供参考:
#!/bin/bash
ipaddr=`ifconfig eth0|sed -n '2p'|sed -e 's/.*inet addr:\(.*\) Bcast.*/\1/g'`
iptail=`echo $ipaddr|cut -d'.' -f4`
ipremote=192.168.1.10
14、如何将跳板机山上的用户的公钥推送到局域网内可以ping通的所有主机上?
-
分析:
环境: 1、跳板机上有一个将要推送公钥的用户存在 例如:yunwei 2、检测当前局域网中哪些ip是能ping通哪些是不能ping通的 循环语句并发的去检查 3、在脚本中所有的交互动作都需要用到expect实现 yunwei用户sudo授权: visudo
Allow root to run any commands anywhere
root ALL=(ALL) ALL yunwei ALL=(root) NOPASSWD:ALL,!/sbin/shutdown,!/sbin/init,!/bin/rm -rf /
#!/bin/bash