jericho0702 发表于 2018-8-17 09:24:55

Shell学习·for循环实例演练

  学过C语言的同学,是否还记得当年各种打印各种星星。今天,我就改一版使用Shell脚本输出各种星星。
  打印单个星号
  这个没啥可说的,直接上代码:
  # cat star.sh
  #!/bin/bash
  echo "*"
  # ./star.sh
  *
  #
  执行后的结果表明,Linux的echo命令打印“*”后会自动换行。无论你在一行中输入几个星号,执行到最后一个星号都会自动换行。
  打印多行星号
  如果想同时在多行中打印星星,例如:每行打印一个打印三行。很明显,实现这个需要重复执行相同的操作来完成,使用循环结构就可以很轻松的解决该问题。
  在Shell 中,循环结构可以使用for、while、和until 等语句来实现。还可以使用continue和break 等语句来在适当的时机跳过或者退出循环体中的某些语句。for循环是最简单,也是最常用的循环语句。本例中我们使用for循环来实现。
  我们多数使用for循环时候,经常使用“带列表的for循环语句”和“类C语言风格的for循环”,首先,介绍下带列表的for循环语句的语法:
  forvariable in {list}
  do
  command1
  command2
  ...
  done
  在上面的语法中,variable 称为循环变量,list 是一个列表,可以是一系列的数字或者字符串,元素之间使用空格隔开。do 和done 之间的所有的语句称为循环体,即循环结构中重复执行的语句。for 循环体的执行次数与list 中元素的个数有关。
  带列表的for 语句执行时,Shell 会将in 关键字后面的list 列表的第1 个元素的值赋给变量variable,然后执行循环体;当循环体中的语句执行完毕之后,Shell 会将列表中的下1个元素的值赋给变量variable,然后再次执行循环体。当list 列表中的所有的元素都被访问后,for 循环结构终止,程序将继续执行done语句后面的其他语句。
  对于LIST的用法,常用的有以下几种:
  ·直接写:例如:1 2 3
  ·大括号:例如:{1..3}
  ·字符串:例如:a b c
  ·文件名例如:/etc/*.conf
  ·命令执行结果:例如:$(find /etc -name "*.conf")
  ·使用脚本的位置参数:例如:$N和$*
  类C语言风格的for循环的语法:
  for((expression1; expression2; expression3));do
  command1
  command2
  ...
  done
  在上面的语法中,for循环语句的条件被两个小括号包起来。执行条件分为3部分,由两个分号隔开,第一部分expression1通常是条件变量的初始化语句,第二部分expression2是决定是否执行for循环的条件。当expression2的值为0时,执行整个循环体,当expression2的值为非0时,退出for循环体。第三部分expression3通常用来改变条件变量的值,例如递增或递减等。
  对于(()) 的用法,例如以下几种:
  ·((i=1;i=1;i--)) :递减1
  ·(( i=1;i
页: [1]
查看完整版本: Shell学习·for循环实例演练