Shell循环练习题

目录

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

  1. #!/bin/bash
  2. #for
  3. for (( a=1; a<=100; a++ ))
  4. do
  5. sum=$[$sum + $a]
  6. done
  7. echo "for:1到100的所有整数的和为 $sum"
  8. #while
  9. b=1
  10. while [ $b -le 100 ]
  11. do
  12. he=$[$he + $b]
  13. let b++
  14. done
  15. echo "while:1到100的所有整数的和为 $he"
  16. #until
  17. c=1
  18. until [ $c -gt 100 ]
  19. do
  20. qiuhe=$[$qiuhe + $c]
  21. let c++
  22. done
  23. echo "until:1到100的所有整数的和为 $qiuhe"

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

  1. #!/bin/bash
  2. read -p "请输入一个小于100且大于0的整数:" num
  3. #for
  4. if [ $num -gt 0 -a $num -lt 100 ];then
  5. for ((a=1; a<=$num;a++))
  6. do
  7. sum=$[$sum + $a]
  8. done
  9. echo "for:1到$num 之间的所有整数的和为$sum "
  10. elif [ $num -eq 0 ];then
  11. echo "for:您输入的数字为0,并没有大于0,请重新输入"
  12. elif [ $num -lt 0 ];then
  13. echo "for:您输入的数字$num小于0,请重新输入"
  14. elif [ $num -eq 100 ];then
  15. echo "for:您输入的数字为100,并没有小于100,请重新输入"
  16. elif [ $num -gt 100 ];then
  17. echo "for:您输入的数字$num大于100,请重新输入"
  18. else
  19. echo "for:您输入的不是一个整数,请重新输入"
  20. fi
  21. #while
  22. if [ $num -gt 0 -a $num -lt 100 ];then
  23. b=1
  24. while [ $b -le $num ]
  25. do
  26. he=$[$he + $b]
  27. let b++
  28. done
  29. echo "while:1到$num 之间的所有整数的和为$he "
  30. elif [ $num -eq 0 ];then
  31. echo "while:您输入的数字为0,并没有大于0,请重新输入"
  32. elif [ $num -lt 0 ];then
  33. echo "while:您输入的数字$num小于0,请重新输入"
  34. elif [ $num -eq 100 ];then
  35. echo "while:您输入的数字为100,并没有小于100,请重新输入"
  36. elif [ $num -gt 100 ];then
  37. echo "while:您输入的数字$num大于100,请重新输入"
  38. else
  39. echo "while:您输入的不是一个整数,请重新输入"
  40. fi
  41. #until
  42. if [ $num -gt 0 -a $num -lt 100 ];then
  43. c=1
  44. until [ $c -gt $num ]
  45. do
  46. qiuhe=$[$qiuhe + $c]
  47. let c++
  48. done
  49. echo "until:1到$num 之间的所有整数的和为$qiuhe "
  50. elif [ $num -eq 0 ];then
  51. echo "until:您输入的数字为0,并没有大于0,请重新输入"
  52. elif [ $num -lt 0 ];then
  53. echo "until:您输入的数字$num小于0,请重新输入"
  54. elif [ $num -eq 100 ];then
  55. echo "until:您输入的数字为100,并没有小于100,请重新输入"
  56. elif [ $num -gt 100 ];then
  57. echo "until:您输入的数字$num大于100,请重新输入"
  58. else
  59. echo "until:您输入的不是一个整数,请重新输入"
  60. fi

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

  1. #!/bin/bash
  2. #for
  3. for (( a=1; a<=99; a+=2 ))
  4. do
  5. ji=$[$ji + $a]
  6. done
  7. echo "for:从1到100,所有整数的奇数和为$ji"
  8. for (( b=2; b<=100; b+=2 ))
  9. do
  10. ou=$[$ou + $b]
  11. done
  12. echo "for:从1到100,所有整数的偶数和为$ou"
  13. #while
  14. c=1
  15. while [ $c -le 99 ]
  16. do
  17. jishu=$[$jishu +$c]
  18. let c+=2
  19. done
  20. echo "while:从1到100,所有整数的奇数和为$jishu"
  21. d=2
  22. while [ $d -le 100 ]
  23. do
  24. oushu=$[$oushu +$d]
  25. let d+=2
  26. done
  27. echo "while:从1到100,所有整数的偶数和为$oushu"
  28. #until
  29. e=1
  30. until [ $e -gt 99 ]
  31. do
  32. jihe=$[$jihe +$e]
  33. let e+=2
  34. done
  35. echo "until:从1到100,所有整数的奇数和为$jihe"
  36. f=2
  37. until [ $f -gt 100 ]
  38. do
  39. ouhe=$[$ouhe +$f]
  40. let f+=2
  41. done
  42. echo "until:从1到100,所有整数的偶数和为$ouhe"

4.执行脚本输入用户名,若该用户存在,输出提示该用户已存在;若该用户不存在,提示用户输入密码,建立用户并设立其密码

  1. #!/bin/bash
  2. username=$1
  3. if grep "$username:" /etc/passwd &> /dev/null;then
  4. echo "该用户已存在"
  5. else
  6. read -p "该用户不存在,正在为您创建该用户,请输入密码:" passwd
  7. while [ -z $(echo $passwd) ]
  8. do
  9. read -p "密码不可为空,请重新输入:" passwd
  10. done
  11. useradd $1 && echo $passwd | passwd --stdin $1 &> /dev/null
  12. echo "用户$1创建成功"
  13. fi

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

  1. #!/bin/bash
  2. read -p "请输入您想要测试的网段:" a
  3. #for
  4. for ((b=1; b<=254; b++))
  5. do
  6. {
  7. ip=${a%.*}.$b
  8. ping -c 3 -i 0.5 -w 2 $ip &> /dev/null
  9. if [ $? -eq 0 ];then
  10. echo $ip >> host_ip
  11. fi
  12. }&
  13. done
  14. echo "for:测试成功,已将通信主机ip记录于host_ip中"
  15. #while
  16. c=1
  17. while [ $c -le 254 ]
  18. do
  19. {
  20. ipadd=${a%.*}.$c
  21. let c++
  22. ping -c 3 -i 0.5 -w 2 $ipadd &> /dev/null
  23. if [ $? -eq 0 ];then
  24. echo $ipadd >> host_ip
  25. fi
  26. }&
  27. done
  28. echo "while:测试成功,已将通信主机ip记录于host_ip中"
  29. #until
  30. d=1
  31. until [ $d -gt 254 ]
  32. do
  33. {
  34. ipaddrs=${a%.*}.$d
  35. let d++
  36. ping -c 3 -i 0.5 -w 2 $ipaddrs &> /dev/null
  37. if [ $? -eq 0 ];then
  38. echo $ipaddrs >> host_ip
  39. fi
  40. }&
  41. done
  42. echo "until:测试成功,已将通信主机ip记录于host_ip中"

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

  1. #!/bin/bash
  2. read -p "请先设置一个密码:" passwd
  3. read -p "请输入您的密码:" mima
  4. c=1
  5. while [ $c -lt 3 ]
  6. do
  7. if [ $mima = $passwd ];then
  8. echo "密码正确,服务启动中"
  9. exit
  10. else
  11. read -p "密码错误,请重新输入:" mima
  12. if [ $mima = $passwd ];then
  13. echo "密码正确,服务启动中"
  14. exit
  15. else
  16. let c++
  17. fi
  18. fi
  19. done
  20. if [ $c -eq 3 ];then
  21. echo "错误三次,暴破滚粗"
  22. exit
  23. fi

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

  1. #!/bin/bash
  2. keywords="qwertyuiopasdfghjklzxcvbnmQWERTYUIOPASDFGHJKLZXCVBNM1234567890!@#$%^&*()_+{}:<>?[];,./"
  3. for a in {1..8}
  4. do
  5. num=$[$RANDOM % ${#keywords}]
  6. mima=${keywords:$num:1}
  7. password+=$mima
  8. done
  9. echo "随机密码为:$password"

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

  1. #!/bin/bash
  2. sum=0
  3. shop=1
  4. read -p "这是第一家店铺,请问是否进入:(Y/N)" jinru
  5. while [ $jinru = Y ]
  6. do
  7. echo "选项1衣服500元"
  8. echo "选项2裤子400元"
  9. echo "选项3鞋子350元"
  10. echo "选项4帽子150元"
  11. echo "选项5袜子50元"
  12. echo "选项6不再购买任何商品"
  13. read -p "选择你要购买的商品:" goods
  14. case $goods in
  15. 1)
  16. echo "衣服购买成功"
  17. sum=$[sum + 500]
  18. ;;
  19. 2)
  20. echo "裤子购买成功"
  21. sum=$[sum + 400]
  22. ;;
  23. 3)
  24. echo "鞋子购买成功"
  25. sum=$[sum + 350]
  26. ;;
  27. 4)
  28. echo "帽子购买成功"
  29. sum=$[sum + 150]
  30. ;;
  31. 5)
  32. echo "袜子购买成功"
  33. sum=$[sum + 50]
  34. ;;
  35. 6)
  36. read -p "选择是否继续或停止购物,或是换店逛逛?(continue/stop/change)" xz
  37. if [ $xz = continue ];then
  38. echo "请继续在本店购物"
  39. elif [ $xz = change ];then
  40. echo "在本店共消费$sum 元"
  41. let shop++
  42. echo "欢迎来到第$shop家店铺"
  43. elif [ $xz = stop ];then
  44. echo "本次购物共消费$sum 元,请支付"
  45. echo "支付成功,欢迎下次光临"
  46. exit
  47. else
  48. echo "输入错误"
  49. fi
  50. ;;
  51. *)
  52. echo "目前没有该商品,掌柜正在努力进货"
  53. ;;
  54. esac
  55. done

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

  1. #!/bin/bash
  2. mkdir -p /root/bin/aa/bb/cc/dd
  3. touch /root/bin/aa/bb/cc/dd/abc.txt
  4. OLDIFS=$IFS
  5. IFS=$IFS':'
  6. for a in $PATH
  7. do
  8. echo "$a:"
  9. floder=$(find $a -type d)
  10. for d in $floder
  11. do
  12. echo "$d"
  13. done
  14. file=$(find $a -type f)
  15. for f in $file
  16. do
  17. if [ ! -x "$f" ];then
  18. echo "-- $f"
  19. fi
  20. done
  21. done
  22. IFS=$OLDIFS

Shell循环练习题的更多相关文章

  1. Shell 循环中实现展示进度百分比的脚本方法

    Shell 循环中实现展示进度百分比的脚本方法 当我需要处理一个几万行的文件的时候,需要处理的时间是比较长的.我一开始的想法是,没处理一行,就输出一个 # 号.但是这样还是会出现很多很多的 # 号,即 ...

  2. shell基础练习题

    shell 基础练习题 1.编写脚本/root/bin/systeminfo.sh,显示当前主机系统信息,包括主机名,IPv4地址,操作系统版本,内核版本,CPU型号,内存大小,硬盘大小 #!/bin ...

  3. For,while,case,shell循环结构

                                                                For,while,case,shell循环结构 案例1:使用for循环结构 案 ...

  4. Shell循环语句for、while、until

    Shell循环语句for.while.until            一.条件测试            二.删除字符            三.循环语句              示例1     ...

  5. Shell条件练习题

    Shell条件练习题 目录 Shell条件练习题 1.检查用户家目录中的 test.sh 文件是否存在,并且检查是否有执行权限 2.提示用户输入100米赛跑的秒数,要求判断秒数大于0且小于等于10秒的 ...

  6. Linux shell循环

    条件测试 格式 test condition 或 [ condition ] 使用方括号时,要注意在条件两边加上空格,如果有操作符,运算符之间也必须有空格 测试状态:测试的结果可以用$?的值来判断,0 ...

  7. shell 循环使用

    问题描述:                  shell中for循环while循环的使用 问题解决:              (1)for循环                      (1.1)数 ...

  8. shell脚本练习题

    下面列出了几个linux学习中的shell脚本题目 1.九九乘法表 #!/bin/bash echo "九九乘法表" # 注意((之间不能有空格.加减乘除的格式.还有转义字符\*. ...

  9. 【Shell循环进程并行处理】利用简单的语句实现for循环并行处理命令

    在生信分析中,经常会遇到不同的重复和处理,这样的分析过程有时是非常费时且占用资源并不是很多的,可以同时在后台运行以节约时间,这是并行处理的意义.除了需要并行处理,循环迭代来遍历整个文件夹的需要分析的数 ...

随机推荐

  1. SpringBoot 之 Dao层模拟数据库操作

    单表操作: # src/main/java/com/wu/dao/DepartmentDao .java @Repository public class DepartmentDao { privat ...

  2. c# - 数据类型转换和控制台输入

    1.使用c#自带的 Convert类转换数据类型 2.源码 using System; namespace ConsoleApp1.toValue { class excutejiecheng { s ...

  3. vue 快速入门 系列 —— 模板

    其他章节请看: vue 快速入门 系列 模板 前面提到 vue 中的虚拟 dom 主要做两件事: 提供与真实节点对应的 vNode 新旧 vNode 对比,寻找差异,然后更新视图 ①.vNode 从何 ...

  4. Java 将PDF转为PDF/A

    通过将PDF格式转换为PDF/A格式,可保护文档布局.格式.字体.大小等不受更改,从而实现文档安全保护的目的,同时又能保证文档可读.可访问.本篇文章,将通过Java后端程序代码展示如何将PDF转为符合 ...

  5. RISC-V CPU加电执行流程

    市面上采用RISC-V架构的CPU很多,且没有如X86那样高度细节的标准,故采用说明文档详细的SiFive Freedom U540-C000芯片来做介绍(下面统一称为FU540). FU540支持多 ...

  6. 2月3日 体温APP开发记录

    1.阅读构建之法 现代软件工程(第三版) 2.观看Android开发视频教程最新版 Android Studio开发 3.回返地址学习,下载导入相关jar包

  7. ajax的核心

    <script> // ajax 简称(a 代表异步 j 代表javascript a 代表 and x 代表xml--是一种带有标签的数据格式,被json取代了) //ajax 是异步对 ...

  8. CSS快速入门(三)

    目录 字体相关调整 背景相关调整 控制背景平铺 调整背景图像的大小 边框属性 圆与圆角 盒模型 块级盒子(Block box) 和 内联盒子(Inline box) display属性 盒子模型 盒模 ...

  9. dataTaDataTable 详细教程

    DataTable 选项说明 特性 jQueryUI:true/false:控制是否使用jqueryUI样式,需要引入jQueryUI的CSS autoWidth:true/false:控制Datat ...

  10. golang操作mysql

    1. 安装mysql驱动库和sqlx基于官方sql库的扩展库 go get github.com/go-sql-driver/mysql go get github.com/jmoiron/sqlx ...