ICode9

精准搜索请尝试: 精确搜索
首页 > 系统相关> 文章详细

3.shell脚本循环试题

2022-06-19 18:05:36  阅读:208  来源: 互联网

标签:脚本 do shell 试题 echo 循环 done bin 变量


shell脚本循环试题

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

#!/bin/bash
a=0
for i in {1..100}  #1到100
#每次循环变量i的值也为循环次数
do
 a=$[ $a + $i ] 
 #每次循环变量重新赋值给变量a
done
 echo "(1+..100)的和是"$a

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

#!/bin/bash
a=0
read -p "请输入一个小于100的整数" c
for l in `seq $c`
#seq 有打印数字的功能默认以1开始
do
 let a=$a+$l
 #每次循环变量重新赋值给变量a
done
 echo "你需要的整数和是"$a

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

方式1

#!/bin/bash
a=0
b=0
for i in {1..50}
do
 let b+=2 #每次循环自加2
 a=$[ $a + $b ]
done
 echo "(1+..100)的偶数和是"$a
#!/bin/bash
a=0
b=1
for i in {1..50}
do
 a=$[ $a + $b ]
 let b+=2
done
 echo "(1+..100)的奇数和是"$a

方式2

#!/bin/bash
a=0
b=0
c=0
d=1
for i in {1..50}
do
 let b+=2
 a=$[ $a + $b ]
 c=$[ $c + $d ]
let d+=2   
done
 echo "1-100的偶数和是$a"
 echo "1-100的奇数和是$c"

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

[root@localhost ~]# cat users.txt
lei
xie
qing

#!/bin/bash
a=`cat ~/users.txt`
#以命令的结果为变量a的值
for i in $a 
do
 su $i &>/dev/null #切换用户混合输出到黑洞
  if [ $? -eq 0 ] #判断上一条命令的返回结果返回0则可以登录输出用户已存在
  then
   echo "$i用户已存在"
  else
   read -p "请输入用户密码" b #其他表示用户不存在则定义变量作为用户密码
   useradd $i   #创建用户
   echo "$b" |passwd --stdin $i   #免交互设置用户密码
  fi
done

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

#!/bin/bash
a="192.168.239."  #定义一个变量
for i in {1..10}  #循环次数也为变量i的值也为IP范围
do
 ping -c 3 $a$i &>/dev/null   #检测连通性平3次 混合输出到黑的
  if [ $? -eq 0 ]    #判断命令返回值是否为0为0表示可以通
  then
   echo "$a$i" >>host_ip #则将ip追加到 host_ip文件内
  fi
done

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

#!/bin/bash
b=123456
#定义变量作为正确密码
for i in {1..3}   #循环次数
do
read -p "请输入密码" a  #定义变量作为用户输入的密码
 if [ $a -eq $b ]   #判断用户输入的密码是否正确,真确则输出密码正确并退出脚本
 then
  echo "密码正确"
 exit
 fi
done
echo "报警有人视图破解你的密码"
#如果循环3次输入的密码都不对则报警

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

#!/bin/bash
a="abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWSYZ0123456789"
#定义一个变量为随机取值范围
for i in {1..6}  #循环6次
do
 b=$[RANDOM % ${#a}] #每次循环随机获取变量a,0到长度-1的下标值
 c=${a: b:1} #截取变量a下标为b的值
 d=$d$c #每循环一次追加一个值生成随机密码
done
echo "本次生成的随机密码是$d"

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

#!/bin/bash
read -p "请输入十进制数字(0-255)" a 
#定义变量
for i in 128 64 32 16 8 4 2 1
#循环次数也会变量i每次循环的值
do 
  if [ $a -ge $i ]
  #判断变量a大于等于变量i则减去变量i定义变量c值为1其他则输出变量c值为0
  then
   a=$[$a-$i]
   c=1
  else
   c=0
  fi
 d=$d$c  #迭代每循环一次家一个值
done
 echo "本次十进制数转二进制数的结果为$d"

9.将一个点分十进制格式的IP地址转换成点分二进制格式

#!/bin/bash
read -p "请输入ip" a
e=.    #定义变量值为.作为分隔符
a1=`echo $a | awk -F. '{print $1}'`
a2=`echo $a | awk -F. '{print $2}'`
a3=`echo $a | awk -F. '{print $3}'`
a4=`echo $a | awk -F. '{print $4}'`
#分段定义变量
for b in $a1 $a2 $a3 $a4  #以变量作为变量值也为外循环的循环次数
do
  for i in 128 64 32 16 8 4 2 1   #表示循环8次每次循环变量i的值 
  do
   if [ $b -ge $i ]      #判断大于等于变量i则减去并输出变量c=1其他为0
   then
    b=$[$b-$i]
    c=1
   else
    c=0
   fi
  d=$d$c   #内循环迭代
  done
     if [ ${#d} -eq 35 ]#判断当变量d的参数个数等于35是退出此次循环
     then
      break
     fi
 d=$d$e #外循环迭代
done
 echo "本次十进制IP转二进制结果为:$d"

10.写个逛淘宝选购商品脚本,每家商店有五种商品选购(衣服500元,裤子400元,鞋子350元,帽子150元,袜子50元),每次选购完或不买都会提示用户是否继续逛下一家商店,如果不再继续逛的话进行购物车结算总额。

#!/bin/bash
#n代表逛了几家店
n=1
#sum代表购物总额
sum=0
#只要不退出就会一直执行下去
while true
do
  echo "来到了第${n}家店门口"
  read -p "是否进入看看?(yes/no)" doing
  #如果 doing 为yes,则会一直在这家店购物,为no会退出这个循环
  while [ "$doing" = "yes" ]
  do
    echo -e "1:衣服¥500\n2:裤子¥400\n3:鞋子¥350\n4:帽子¥150\n5:袜子¥50\n6:放弃购
买"
    read -p "请选择你需要购买的商品序号:" num
    case $num in
    1)
      echo "衣服购买成功"
      sum=$[sum + 500]
      ;;
    2)
      echo "裤子购买成功"
      sum=$[sum + 400]
      ;;
    3)
      echo "鞋子购买成功"
      sum=$[sum + 350]
      ;;
    4)
      echo "帽子购买成功"
      sum=$[sum + 150]
      ;;
    5)
      echo "袜子购买成功"
      sum=$[sum + 50]
      ;;
    6)
      echo "放弃购买"
      ;;
    *)
      echo "输入有误"
    esac
    read -p "是否继续在这家店购物?(yes/no)" doing

  done
 #going 为yes时。店的数量n会加1后继续循环,如果为no,则退出循环
  read -p "是否换一家继续逛?(yes/no)" going
  if [ "$going" = "yes" ];then
    let n++
  else
    break
  fi
done
echo -e "一共逛了${n}家店。\n合计购物总额:${sum}元。"

11.输出环境变量PATH的目录所包含的所有可执行文件

#!/bin/bash
IFS=$IFS':'
#指定分隔符
for fd in $PATH 
#以变量作为变量值也为循环次数
do
  for a in $fd/* 
  #以每次外部循环变量fd下所有文件作为变量值也为循环次数
  do
    if [ -x $a ];then   
    #判断文件是否有执行权限有则输出$a有执行权限
      echo "$a 有执行权限"
    fi
 done
done

12.mkdir -p /root/bin/aa/bb/cc/dd ; touch /root/bin/aa/bb/cc/dd/abc.txt,
输出环境变量PATH所包含的所有目录以及其中的子目录和所有不可执行文件

#!/bin/bash
geng() {
for b in $1    #这里的$1为函数后跟的第一个位置参数也就是$c
do
 if [ -d $b ];then    #判断$b是否为文件是则输出$b是文件并调用本身$b下的所有文件作为变量b的值也为循环次数进行再次判断,如果不是则进入下一判断,判断$b是否为文件且没有执行权没有则输出$b没有执行权限
  echo "$b 是目录"     
   geng "$b/*"  
  elif [ -f $b ] && [ ! -x $b ];then      
    echo "$b 没有执行权限"
 fi
done
}

IFS=$IFS':'  #指定分隔符
for c in $PATH   #使用变量PATH作为变量c的值也为循环次数
do
geng "$c"   #调用函数$c为每次循环$b的变量值
done

标签:脚本,do,shell,试题,echo,循环,done,bin,变量
来源: https://www.cnblogs.com/DavinWw/p/16390958.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有