shell练习题(2)

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
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值