shenll 案例1
1.通过位置变量创建 Linux 系统账户及密码
#!/bin/bash
# 通过位置变量创建系统账户及密码
# $# 表示脚本后面接了多少个参数 $n 表示第几个参数 && 逻辑与
if [ $# -eq 0 -o $# -eq 1 ];then
echo "usage: ./addUser.sh 添加的账户 设置账户密码"
exit 0;
fi
# $0 表示执行的脚本 $1 表示执行脚本后面接的第一个参数 $2 表示第二个参数
# 双引号中的$保留特殊含义,会输出转换成变量的值;单引号中的任何值都不会做特殊解释,$也不会转换成变量的值
useradd "$1"
# 管道符后面命令为更改用户密码,加上--stdin是接受echo后面的字符串($2)作为密码
echo "$2" | passwd --stdin "$1"

传参数建立账户和密码
2.每周 5 使用 tar 命令备份/var/log 下的所有日志文件
]# vim /root/logbak.sh tar -czf log-`date +%Y%m%d`.tar.gz /var/log ]# crontab -e -u root 00 03 * * 5 /root/logbak.sh
第一个*:一小时中的第几分钟【0-59】
第二个*:一天中的第几个小时【0-23】
第三个*:一个月当中的第几天【1-31】
第四个*:一年中的的第几月【1-12】
第五个*:一周当中对的星期几【0-7 0和7都表示 周日】
3.监控本机内存和硬盘剩余空间,剩余内存小于 500M、根分区剩余空间小于 1000M
时,发送报警邮件给 root 管理员
#!/bin/bash
aa=`df | awk '{print $4}'|sed -n '2p'` #根分区剩余
bb=`free | awk '{print $4}'|sed -n '2p'` #内存
echo $aa
echo $bb
if [ $aa -gt 512000 -a $bb -gt 100000 ];then
mail -s bayi1604@126.com <<EOF
Insufficient resources,资源不足
EOF
fi
4.脚本生成一个 100 以内的随机数,提示用户猜数字,根据用户的输入,提示用户猜对了,
猜小了或猜大了,直至用户猜对脚本结束。
#!/bin/bash
#RANDOM 为系统自带的系统变量,值为 0-32767 的随机数
a=$[RANDOM%100+1]
echo $a
while :
do
read -p "计算机生成了一个 1-100 的随机数,你猜: " num
if [ $num -eq $a ];then
echo "恭喜,猜对了"
exit
elif [ $num -gt $a ];then
echo "猜大了"
else
echo "猜小了"
fi
don
5.检测本机当前用户是否为超级管理员,如果是管理员,则使用 yum 安装 vsftpd,如果不
是,则提示您非管理员(使用字串对比版本)
if [ $USER == 'root' ] then yum ‐y install vsftpd else echo "您不是管理员,没有权限安装软件" fi
6.依次提示用户输入 3 个整数,脚本根据数字大小依次排序输出 3 个数字
#!/bin/bash
read -p "请输入一个整数:" num1
read -p "请输入一个整数:" num2
read -p "请输入一个整数:" num3
#不管谁大谁小,最后都打印 echo "$num1,$num2,$num3"
#num1 中永远存最小的值,num2 中永远存中间值,num3 永远存最大值
tmp=0
if [ $num1 -gt $num2 ];then
tmp=$num1
num1=$num2
num2=$tmp
fi
if [ $num1 -gt $num3 ];then
tmp=$num1
num1=$num3
num3=$tmp
fi
if [ $num2 -gt $num3 ];then
tmp=$num2
num2=$num3
num3=$tmp
fi
echo "排序后数据为:$num1,$num2,$num3"
7.编写脚本测试 10.0.0.0/24 整个网段中哪些主机处于开机状态,哪些主机处于关机状态(多进程版)
#!/bin/bash
for i in {1..99}
do
ping -c2 -i0.3 -W1 10.0.0.$i &>/dev/null
if [ $? -eq 0 ];then
echo "10.0.0.$i is up"
else
echo "10.0.0.$i is down"
fi
done
8.编写批量修改扩展名脚本
#!/bin/bash
read -p "\\给出想修改的扩展名 " exname
read -p "\\给出新的扩展名 " new
read -p "\\给出文件所在目录 " dir
cd $dir
for file in $(ls $dir | grep .$exname)
do
name=`ls $file | cut -d. -f1`
mv $file ${name}.$new
done
#!/bin/bash
for i in `ls *.$1`
do
name=`echo $i |awk -F '.' '{print $1}'`
echo $name
mv $i $name.$2
done
9.检测 MySQL 数据库连接数量,超过2个时报警并发送邮件给自己邮箱(自己测试)
#!/bin/bash
a=`mysqladmin -uroot status|awk '{print $4}'`
if [ $a -eq 2 ];then
mail -s 'mysql' 自己的邮箱地址 <<EOF
Insufficient resources,资源不足
EOF
fi
授权一个mysql用户权限让别的IP可以登陆

10.切割nginx日志
logs="/usr/local/nginx/logs/"
mv ${logs}access.log ${logs}access_$(date +"%Y-%m-%d").log
echo "00 00 * * * /bin/bash /root/shell/nginx_log.sh" >> /var/spool/cron/root

浙公网安备 33010602011771号