shell 脚本练习

回复 收藏
1,写一个shell脚本。提示你输入一个暂停的数字,然后从1打印到该数字。然后询问是否继续。继续的话在输入个在数字 接着打印。不继续退出。
例:如果输入的是5,打印1 2 3 4 5  然后继续 输入15   然后打印 6 7 ...14 15 以此类推。http://www.apelearn.com/bbs/forum.php?mod=image&aid=6167&size=300x300&key=8f996f5f62cd317a&nocache=yes&type=fixnone
QQ图片20160324161305.png QQ图片20160324161305.png
2016-03-24 16:19 举报
已邀请:
0

大仔黑黑

赞同来自:

  1. #!/bin/bash
  2. ##written by wangyl
  3. ##2016-4-20

  4. read -p "请输入您想要暂停的数字:" number_1
  5. for i in `seq 1 $number_1`;
  6. do
  7.         echo $i
  8. done
  9. read -p "是否继续输入数字?" a
  10. if [ $a == "yes" ];then
  11.         read -p "请继续输入您想要暂停的数字:" number_2
  12.         number_3=$[$number_1+1]
  13.         if [ $number_2 -gt $number_1 ];then
  14.                 for h in `seq $number_3 $number_2`;
  15.                 do
  16.                         echo $h
  17.                 done
  18.         else
  19.                 echo "输入数字错误,请输入大于的数字!"
  20.         fi
  21. else
  22.         exit
  23. fi
0

乐橙306

赞同来自:

  1. [root@aliyun-63 Test]# cat a4.sh
  2. #!/bin/bash
  3. ###


  4. cycle(){
  5. if  [ $? -eq 0  ]
  6.   then
  7.   start_stop
  8. fi
  9.   exit
  10. }


  11. contiue(){
  12. echo -e "input a number: "
  13. read a3
  14. m=$[$a1+1]
  15. if [ $a3 -lt $a1 ]
  16. then
  17.   for n  in `seq 1  $a3`
  18.   do
  19.   echo $n
  20.   done
  21.   cycle
  22. else
  23.   for n  in `seq $m  $a3`
  24.   do
  25.   echo $n
  26.   done
  27.   cycle
  28. fi
  29. }


  30. start_stop(){
  31. echo -e  "are you sure contiue(y or n) "
  32. read a2
  33. if [ $a2 = y  ]
  34.   then
  35.   contiue
  36. fi
  37.   exit 1
  38. }   


  39. echo -e "input a number:(1-99) "
  40. read a1
  41. expr  ${a1} + 0 &>/dev/null
  42. if [ $? -eq 0  ]
  43. then
  44. for n  in `seq  1  $a1`
  45.   do
  46.   echo $n
  47. done
  48.   start_stop
  49. fi
  50.   echo  "input invalid"
  51.   exit 0

  52. [root@aliyun-63 Test]#


0

乐橙306

赞同来自:


只询问了一次 是否继续   
0

duyanbin

赞同来自:

本帖最后由 duyanbin 于 2016-4-20 17:44 编辑

#!/bin/bash
c=1
while true ; do
read -p "请输入一个数字  ==> " n

[[ $n =~ ^[0-9]+$ ]] || { echo "请确保输入的是数字且为正! 再输一次==>" ; continue ; }
[[ $n -ge $c ]] || { echo "请确保输入的数字大于等于$c! 再输一次==>" ; continue ; }

seq $c $n | xargs
c=$((n+1))

read -p "是否继续输入?  y 继续 , 其他任意字符退出 ==>" ans
case $ans in

y)  continue ;;

*)   echo "退出脚本"
                         exit 1
esac
done
0

大仔黑黑

赞同来自:

乐橙306 发表于 2016-4-20 15:41
只询问了一次 是否继续

恩,有缺陷,没看到后面的以此类推
0

等风来

赞同来自:

学习
0

dessler

赞同来自:

本帖最后由 dessler 于 2016-5-23 14:35 编辑

我把所有注释都加进去了,主要是容错,部分语法参考了其他人了
比如输入为空,输入不是纯数字
但是只考虑了2次输入,如果按照程序要求的话,估计后面还有无数层,就不在我的考虑范围了
前前后后调试居然花了2个小时
  1. #!/bin/bash
  2. #by chenhong 2016.5.23
  3. #定义输入第一个输入的数变量为n
  4. read -t 10 -p "请输入你要打印的数字:" n
  5. #第一次判断变量n是否为空,如果不为空则继续
  6. if [ -n "$n" ]
  7. then
  8. #将变量n通过sed替换掉里面的数字并重新定义为变量m
  9.         m=$(echo $n | sed 's/[0-9]//g')
  10. #进行第二次判断变量m是否为空,如果为空则继续
  11.         if [ -z $m ]
  12.         then
  13. #执行for 循环 1 到 变量n
  14.         for i in `seq 1 $n`
  15.                 do
  16.                         echo $i
  17.                 done
  18. #定义输入第二个输入的数变量为n1
  19.         read -t 10 -p "请继续输入数字打印:" n1
  20. #第三次判断变量n1是否为空,如果不为空则继续
  21.         if [ -n "$n1" ]
  22.         then
  23. #将变量n1通过sed替换掉里面的数字并重新定义为变量m1
  24.         m1=$(echo $n1 | sed 's/[0-9]//g')
  25. #进行第四次判断,判断用户第二次输入的信息是否为纯数字,如果是则继续
  26.                 if [ -z $m1 ]
  27.                 then
  28. #定义变量n2,为变量n+1(打印的第一个数字如果一切正常的话)
  29.                 n2=$[$n+1]
  30. #进行第五次判断,如果第一次输入的数字,小于第二个输入的数字,则执行
  31.                 if [ $n -lt $n1 ]
  32.                         then
  33. #执行for循环,定义n+1到n1 之间的值得
  34.                         for i1 in  `seq $n2 $n1`
  35.                         do
  36.                                 echo $i1
  37.                         done
  38. #进行第五次判断,如果第一次输入的数字,不小于第二个输入的数字,则退出
  39.                 else
  40.                         echo "你第二次输入的数字小于或者等于第一个数字"
  41.                 fi
  42. #进行第四次判断,判断用户第二次输入的信息是否为纯数字,如果不是则提示错误信息
  43.                 else
  44.                         echo "你的第二次输入的不是纯数数字"
  45.                 fi
  46. #第三次判断变量n1是否为空,如果为空则输入错误信息
  47.         else
  48.                 echo "你的第二次输入为空,请正确输入"
  49.         fi
  50. #进行第二次判断变量m是否为空,如果不为空则说输入的不是数字,则输入错误信息
  51.         else
  52.                 echo "你的第一次输入不是纯数字"
  53.         fi
  54. #第一次判断变量n是否为空,如果为空则输入错误信息
  55. else
  56.         echo "你的第一次输入为空,请输入你的值"
  57. fi

回复帖子,请先登录注册

退出全屏模式 全屏模式 回复
评分
可选评分理由: