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 [ ! -x $b ];then           echo $b 没有执行权限  fi done }  IFS=$IFS':'  #指定分隔符 for c in $PATH   #使用变量PATH作为变量c的值也为循环次数 do geng $c   #调用函数$c为每次循环$b的变量值 done