1、ping主机测试
#! /bin/bash
read -p "Enter test IP:" ip
ping -c2 -i 0.2 -W 1 $ip &> /dev/null
if [ $? -eq 0 ]; then
echo "True"
else
echo "False"
fi
2、判断一个用户是否存在
#! /bin/bash
read -p "user name:" name
id $name &> /dev/null
if [ $? -eq 0 ]
then
echo "User already exists"
else
echo "User does not exist"
fi
3、判断当前内核主版本是否为3,且次版本是否大于10
#! /bin/bash
Version=`uname -r | cut -d "." -f1` #主版本号
version=`uname -r | cut -d "." -f2` #次版本号
if [ $Version -ne 3 ];then
echo "Your version not is version3"
fi
if [ $Version -eq 3 -a $version -le 10 ];then
echo "Your version is $Version.$version"
fi
if [ $Version -eq 3 -a $version -gt 10 ];then
echo "Your version exceeds $Version.$version"
fi
4、判断vsftpd软件包是否安装,如果没有则自动安装
#! /bin/bash
if [ $UID -ne 0 ]; then
echo "You need to be root to perform this command"
exit 2
fi
# yum available
yum list &> /dev/null
if [ $? -ne 0 ]; then
echo "yum不可用"
exit 2
fi
rpm -q vsftpd &> /dev/null
if [ $? -ne 0 ]; then
yum -y install vsftpd &> /dev/null
echo "successful installation"
else
echo "Already installed"
fi
5、判断httpd是否运行
#! /bin/bash
if [ $UID -ne 0 ]; then
echo "Permission denied "
exit 1
fi
rpm -q httpd &> /dev/null
if [ $? -ne 0 ]; then
echo "httpd is not install"
exit 2
else
systemctl status httpd &> /dev/null
if [ $? -ne 0 ];then
echo "httpd is not running"
else
echo "httpd running"
fi
fi
6、判断指定的主机是否能ping通,必须使用$1变量
#! /bin/bash
[ -z $1 ] && echo "input error" && exit 1
ping -c 2 -i 0.2 -W 1 $1 &>/dev/nulli
if [ $? -eq 0 ];then
echo "True"
else
echo "False"
fi
**7、报警脚本,要求如下: 根分区剩余空间小于20% 内存已用空间大于80% 向用户alice发送告警邮件 配合crond每5分钟检查一次 **
#! /bin/bash
rpm -q mailx &> /dev/null
if [ $? -ne 0 ];then
yum -y install mailx & >/dev/null
fi
id alice &> /dev/null
if [ $? -ne 0 ];then
useradd alice &> /dev/null
fi
bd=`df -h | grep /$ | awk -F '[ %]+' '{print $5}'`
men=`free -m | awk 'NR==2 {printf "%d",($2-$7)/$2*100}'`
if [ $db -gt 80 ]; then
echo "磁盘空间以使用80%" | mail -s "warn" alice
fi
if [ $men -gt 80 ];then
echo "内存以使用80%" |mail -s "warn" alice
fi
chmod +x ceshi.sh #添加权限,用作计划任务
crontab -e
5 * * * * /shell/day3/ceshi.sh
8、判断用户输入的是否是数字
#! /bin/bash
read -p "Enter a character:" str
if [ ${#str} -ne 1 ];then
echo "input error."
exit 2
fi
case "$str" in
[0-9])
echo "$str is number"
;;
*)
echo "$str is not number"
esac
9、使用case实现成绩优良中差的判断
#! /bin/bash
read -p "请输入成绩:" sc
[ -z $sc ] && echo "错误输入:未输入成绩" && exit 1
expr "$sc" + 1 &> /dev/null
if [ $? -eq 0 ];then
if [ $sc -ge 0 -a $sc -le 100 ];then
case "$sc" in
8[5-9]|9[0-9]|100)
echo "您的成绩为:优秀" ;;
7[0-9]|8[0-4])
echo "您的成绩为:良好" ;;
6[0-9])
echo "您的成绩为:中等" ;;
*)
echo "您的成绩为:不及格" ;;
esac
else
echo "错误输入:请输入0-100的数"
exit 3
fi
else
echo "错误输入:请输入数字"
exit 2
fi
10、 for创建20用户 用户前缀由用户输入 用户初始密码由用户输入 例如:test01,test10
#! /bin/bash
read -p "请输入默认密码:" pass
[ -z $pass ] && echo "密码不能为空" && exit 1
read -p "请输入批量创建的用户名:" name
[ -z $name ] && echo "用户名不能为空" && exit 2
for i in `seq 20`
do
id $name$i &> /dev/null
if [ $? -eq 0 ];then
echo "用户已存在"
else
useradd $name$i &>/dev/null
echo $pass | passwd --stdin $name$i >/dev/null
id $name$i &> /dev/null
if [ $? -eq 0 ];then
echo $name$i 已成功创建
else
echo $name$i 创建失败
fi
fi
done
11、for ping测试指网段的主机 网段由用户输入,例如用户输入192.168.2 ,则ping 192.168.2.10 — 192.168.2.20 UP: /tmp/host_up.txt Down: /tmp/host_down.txt
#! /bin/bash
read -p "请输入要测试的网段:" net
for i in `seq 10 20`
do
ping -c 2 -i 0.2 -W 1 $net.$i &> /dev/null
if [ $? -eq 0 ];then
echo $net.$i is up >> /tmp/host_up.txt
else
echo $net.$i is down >> /tmp/host_down.txt
fi
done
12、使用for实现批量主机root密码的修改 成功或失败都必须记录 提示:主机IP存放在一个文件中 SSH:实现公钥认证,执行远程中主机命令 实现公钥认证 # ssh-keygen 在用于管理的主上生成密钥对 # ssh-copy-id -i 192.168.2.3
#在进行脚本之前,需要主机之间能实现ssh免密登录
#! /bin/bash
stty -echo
read -p "请输入新密码: " pass
stty echo
echo
for i in `cat iplist`
do
ssh $i echo $pass | passwd --stdin root &> /dev/null
if [ $? -eq 0 ];then
echo "$i 密码修改成功"
else
echo "$i 密码修改失败"
fi
done
13.输出如下格式的形状
#! /bin/bash
read -p "请输入行数:" n
[ -z $n ] && echo "输入错误:不能为空" && exit 1
[ $n -eq 1 ] && echo "输入错误:至少要有两行" && exit 2
for ((i=1;i<=n;i++))
do
for ((j=1;j<=n-i;j++))
do
echo -n " "
done
for ((k=1; k<=5; k++))
do
echo -n "$i"
done
echo
done
14、用 shell 脚本写出检测 /tmp/size.log 文件如果存在显示它的内容,不存在则创建一个文件将创建时间写入。
#! /bin/bash
path=/tmp/size.log
if [ -f $path ];then
cat $path
else
touch $path
ls -l /tmp | grep size | awk '{print $6"\t"$7"\t"$8}' > $path
fi
15、写一个脚本进行nginx日志统计,得到访问ip最多的前10个
awk ‘{print $1}’ /usr/local/nginx/logs/localhost.access.log |sort | uniq -c | sort -nr -k1 | head -n 10
#sort 排序
#uniq -c在每列旁边显示该行重复出现的次数
#从第1列开始显示-k来指定列数 -rn sort默认的排序方式是升序,如果想改成降序,就加个-r就搞定了。-n选项,来告诉sort,“要以数值来排序”
16、编写脚本,把当前目录下大于10k的文件,转移到/tmp目录下
#! /bin/bash
for i in `ls -l | awk '$5 > 10240{print $9}'`
do
mv $i /tmp
done
17、编写脚本,在/useradm目录下建立二十个目录,并设置每隔目录的权限,其中其他用户的权限为:读;文件所有者的权限为:读、写、执行;文件所有者所在的组的权限为:读、执行
#! /bin/bash
[ -e /useradm ]
if [ $? -ne 0 ];then
echo "基础目录不存在"
mkdir /useradm
echo "以为您自动创建"
fi
cd /useradm
mkdir user{1..20}
chmod 751 user*
18、编写脚本,实现自动删除20个账号及主目录,账号名为stud1至stud20
#! /bin/bash
[ $UID -ne 0 ] && echo "Permission deried" && exit1
read -p "请输入批量删除的用户名:" name
[ -z $name ] && echo "用户名不能为空" && exit 2
for i in `seq 20`
do
id $name$i &> /dev/null
if [ $? -eq 0 ];then
userdel -r $name$i
if [ $? -eq 0 ];then
echo $name$i 已成功删除
else
echo $name$i 删除失败
else
echo "用户不存在"
fi
done