shell脚本习题

目录

1.计算1到100所有整数的和

#/bin/bash
#计算1到100所有整数的和

sum=0
for ((i=1; i<=100; i++))
{
 sum=$[sum + $i]
}
echo "1到100所有整数的和: $sum"

2.提示用户输入一个小于100的整数,并计算从1到该数之间所有整数的和

#!/bin/bash
#计算从1到任意数(100)之间整数和100所有整数的和

a=1
sum=0
read -p "请输入一个1到100的整数:" num
if [ $num -ge 1 ] && [ $num -le 100 ];then

  while [ $a -le $num ]
  do
    let sum+=a
    let a++

  done

  echo "1到100总和为$sum"

else
  echo "输入有误!"
fi



3.求从1到100所有整数的偶数和、奇数和


4.用户名存放在users.txt文件中,每行一个,判断文件里的用户是否存在,若该用户存在,输出提示该用户已存在;用户存在但没设密吗,则提示用户并让用户设置密码;若该用户不存在,提示用户输入密吗,建立用户并设立其密码

5.检测指定范围主机是否通信,并将通信的主机ip输出到文件host_ip中。

6.用户输入密码,脚本判断密码是否正确,正确密码为123456,输入正确提示正确信息,连续输错3次则报警

7.编写能够自动生成一个6位随机密码的脚本

8.输出PATH环境变量的目录里所有以se开头的文件


9.求裴波拉切数:1,1,2,3,5,8,13,21,34,55,89..,数列从第3项开始每一项等于前两项之和,打印前10个元素

10.使用循环语句将一个 0到255 之间的十进制数转换成8位数二进制数


11.将一个200行的文件分割成多个50行的文件


12.写个脚本实现 猜测0-999的随机价格,猜不中,五次机会

#!/bin/bash
#写个脚本实现 猜测0-999的随机价格,五次猜测机会

PRICE=$[RANDOM % 1000]
a=1
b=0
while [ $a -eq 1 ]; 
do
   read -p "请输入你猜测的价格(0-999):" NUM
   let b++
   if [ $NUM -eq $PRICE ] && [ $b -le 5 ]; then
      echo "恭喜你!猜中了!!"
      exit 0    
   elif [ $NUM -gt $PRICE ] && [ $NUM -le 9999 ]; then 
        if [ $b -lt 5 ]; then
        echo "猜大了!请重猜!!"
        else
           echo "不好意思,机会用完了!"
           exit 1
        fi
   elif [ $NUM -lt $PRICE ] && [ $NUM -le 9999 ]; then    
        if [ $b -lt 5 ]; then
      echo "猜小了!请重猜!!" 
        else
           echo "不好意思,机会用完了!"
       exit 2 
      fi
      else       
       echo "猜测有误!请重新输入!!"
   fi

done
~    

13.批量添加用户 用户名称以stu开头,按数字顺序进行编号 一共添加20个用户,即stu1、stu2、……、stu20 初始密码均设为123456

#!/bin/bash
#批量添加用户 用户名称以stu开头,按数字顺序进行编号 一共添加20个用户,即stu1、stu2、……、stu20 初始密码均设为123456

i=1
while [ $i -le 20 ]
do
    useradd stu$i &> /dev/null
    echo 123456 | passwd --stdin stu$i &> /dev/null
    echo "stu$i 用户密码创建完毕!"
    let i++
done

14.每10秒检查系统内存使用率是否超过80%

#!/bin/bash
#每10秒检查系统内存使用率是否超过80%

while true
do
   used=$(free | grep Mem | awk '{print $3}')
   total=$(free | grep Mem | awk '{print $2}')
   percent=$[used * 100 / total]
  if [ $percent -ge 80 ]; then
     echo "警告!警告!当前系统内存使用率超过80%,当前使用率为 ${percent}%"
   fi
   sleep 10

done

15.根据IP地址检查主机状态 使用ping命令检测 20.0.0.0.0~255 的主机,获取在线的主机清单

16.猴子摘下了n个香蕉,当天吃掉一半多一个,第二天也是吃掉剩下香蕉一半多一个,到了第十天,香蕉只剩下了1个。问:猴子第一天摘了多少香蕉?

17.根据IP地址检查主机状态 IP地址存放在ipadds.txt文件中,每行一个 使用ping命令检测各主机的连通性

18.禁用当前系统除了root用户以外的可登录用户

19.用case语句在/etc/init.d/目录中写一个firewalld脚本,并加入到系统服务管理中(#chkconfig: 2345 99 20),使能够使用 service firewalld start|stop|restart|status 来管理firewalld服务,要求如果命令选项不对,则提示 “用法: $0 {start|stop|status|restart}”。

20.用case语句解压根据后缀名为 .tar.gz 或 .tar.bz2 的压缩包到 /opt目录

21.提示用户输入100米赛跑的秒数,要求判断秒数大于0且小于等于10秒的进入选拔赛,大于10秒的都淘汰,如果输入其它字符则提示重新输入;进入选拔赛的成员再进一步判断男女性别,男生进男生组,女生进女生组,如果输入错误请提示错误

22.判断挂载点目录/cdrom是否存在,若存在则挂载光盘镜像,若不存在则自动创建目录并挂载光盘镜像,注:光盘镜像不知是否存在。



23.检查当前用户家目录中是否存在 test.sh 文件,并且检查是否有执行权限

#!/bin/bash
#检査当前用户家目录中是否存在 test.sh 文件,并且检査是否有执行权限

#if [ -f ~/test.sh ]

if [ -f /root/test.sh ]; then
  echo "文件已存在" 
# if [ -x ~/test.sh ]; then

  if [ -x /root/test.sh ]; then
   echo "有执行权限"
  else
   echo "无权限"
   fi
else
  echo "文件不存在"
fi

24.提示用户输入内容,使用if 语句判断输入的内容是否为整数。

25.根据上一题再判断输入的内容是奇数还是偶数

26.每10秒检查系统内存使用率是否超过80%

#!/bin/bash
#每10秒检查系统内存使用率是否超过80%

while true
do
  memused=$(free | grep Mem | awk '{print $3}')
  memtotal=$(free | grep Mem | awk '{print $2}')

  usedpercent=$[memused * 100 / memtotal]

  if [ $usedpercent -ge 20 ];then
    echo "警告!当前系统内存使用率超过80%,当前使用率为 ${usedpercent}%"
  fi

  sleep 10
done

27.批量添加用户,用户名存放在users.txt文件中,每行一个,初始密码均设为123456

#!/bin/bash
#批量添加用户,用户名存放在users.txt文件中,每行一个,初始密码均设为123456
userfile=/root/users.txt

for name in $(cat $userfile)
do
  useradd $name
  echo 123456 | passwd --stdin $name &> /dev/null
done 

echo "批量添加用户完成"

29.99乘法表


30.三角形




uploading-image-878537.png

31.菱形


32.将一个点分十进制格式的IP地址转换成点分二进制格式,定义将十进制转换成二进制功能的函数

#/bin/bash
#将一个点分十进制格式的IP地址转换成点分二进制格式
#定义将十进制转换成二进制功能的函数
switch() {
      num=$1
      result=''
      for j in {1..8}
      do
        yushu=$[num % 2]
        num=$[num / 2]
        result=$yushu$result
      done
         echo $result
}
###### main ######
 read -p "请输入一个IPv4:" IP
n=0
#外循环分割出IP的每段数值
for ((i=1; i<=4; i++))
do
   NUM=$(echo $IP | awk -F. "{print \$$i}")
   res=$(switch $NUM)
   let n++
   #使用n变量作为计数器,当n=4即转换IP的第4段数值后不再使用echo -n
   if [ $n -lt 4 ]; then
       echo -n ${res}.
    else
       echo $res
    fi
done


posted @ 2024-05-15 11:15  无敌小鲁班  阅读(72)  评论(0编辑  收藏  举报