在Bash中编写循环

时间:2020-03-05 15:28:23  来源:igfitidea点击:

如何在Linux/UNIX操作系统下使用bash for loop实现自动化?
如何使用break,continue和用于循环控制表达式的参数?
如何使用for循环处理文件?

For循环是解决编程世界中许多问题的非常有用的工具,因此我们将解决现实世界中的一些问题。
在Linux中,我们通过Bash,Python使用循环来实现自动化,例如密码脚本,计数脚本。
在本文中,我们将解释Bash的所有循环。

1)for循环

我们可以使用For循环读取列表中的所有元素或者其中的一部分,并在屏幕上显示这些元素。

For循环的语法

用于element1 element2 element3或者<List>中的变量

命令
完毕

我们将制作一个脚本来发送一周中每一天的问候消息,因此我们将使用“ for”循环来读取每一天并将其打印出来。
使用“ nano”编辑器创建文件“ welcome.sh”,并在下面粘贴代码。

#!/bin/bash
  for day in Sunday Saturday Monday Tuesday Wednesday Thursday Friday
  do
     echo "Welcome $day day"
  done

使用“ bash”命令运行“ welcome.sh”文件。

$bash welcome.sh
output
Welcome Sunday day
Welcome Saturday day
Welcome Monday day
Welcome Tuesday day
Welcome Wednesday day
Welcome Thursday day
Welcome Friday day

for循环将分别获取列表中的每个项目,并将该项目分配给变量“ $day”,然后执行“ do”和“ done”之间的代码,然后返回顶部,在列出并重复以上。

我们可以使用带有for循环的范围来放置起点和终点。

#!/bin/bash
  for i in {10..20}
  do
     echo "Welcome $i times"
  done
$bash range.sh
output
Welcome 10 times
Welcome 11 times
Welcome 12 times
Welcome 13 times
Welcome 14 times
Welcome 15 times
Welcome 16 times
Welcome 17 times
Welcome 18 times
Welcome 19 times
Welcome 20 times

如果我们要计算从1到20的偶数,我们将为范围添加步长。

#!/bin/bash
  for i in {10..20..2}
  do
     echo "Welcome $i times"
  done
$bash even.sh
output
Welcome 10 times
Welcome 12 times
Welcome 14 times
Welcome 16 times
Welcome 18 times
Welcome 20 times

在step循环中使用step的另一种类型。

#!/bin/bash
  for ((i=1;i<=25;i+=5))
  do
      echo $i
  done
$bash step5.sh
output
1
6
11
16
21

对于否定步骤,我们可以使用以下类型。

#!/bin/bash
  for ((i=25;i>=1;i-=5))
  do
      echo $i
  done
$bash step-5.sh
output
25
20
15
10
5

For循环的例子

1)使用for循环处理文件

当我们处理文件时,Bash For循环是最好的方法。

#!/bin/bash
for file in ~/*.txt
do
    echo $file
done
$bash find_txt.sh
output
/root/cat.txt
/root/echo.txt
/root/file.txt
/root/f.txt
/root/nano.txt
/root/printf.txt

2)一行For循环

我们可以在一行中执行For循环,我们将重命名所有“ * .txt”文件以删除文件扩展名。

$for filename in *.txt; do mv "$filename" "${filename%.txt}"; done

或者在脚本中

!#/bin/bash
  for filename in *.txt
  do
    mv "$filename" "${filename%.txt}"
  done

3)读取命令行参数

当我们执行For循环脚本时,我们可以输入参数。

for myvalue in $*
  do
    echo "Argument: $myvalue"
  done
$bash theitroad.sh I Love theitroad
output
Argument: I
Argument: Love
Argument: theitroad

4)读奇数和偶数

我们将编写脚本以读取偶数和奇数。

for (( n=10; n<=15; n++ ))
do
  if (( $n%2==0 ))
  then
    echo "$n is even"
  else
    echo "$n is odd"
  fi
done
$bash even_odd.sh
output
10 is even
11 is odd
12 is even
13 is odd
14 is even
15 is odd

2)while循环

当循环取决于条件为真时,如果条件为假,则解释器退出循环。

while循环的语法

while [ <some condition> ]do
<commands>
done

我们将从10数到20,然后打印出结果。
因此我们将设一个条件,使计数器小于或者等于20。

#!/bin/bash
  # Basic while loop
  counter=10
  while [ $counter -le 20 ]
  do
    echo Number : $counter
    ((counter++))
  done
$bash while.sh
output
Number : 10
Number : 11
Number : 12
Number : 13
Number : 14
Number : 15
Number : 16
Number : 17
Number : 18
Number : 19
Number : 20

3)until 循环

until 循环像while循环一样,但是解释器会执行其中的命令,直到条件变为真为止。

until循环的语法

until [ <some condition> ]do
<commands>
done

我们将从10数到20,然后打印出结果。
因此我们将设一个条件,使计数器大于或者等于20。

#!/bin/bash
  # Basic Until loop
  counter=10
  until [ $counter -gt 20 ]
  do
    echo Number : $counter
    ((counter++))
  done
$bash until.sh
output
Number : 10
Number : 11
Number : 12
Number : 13
Number : 14
Number : 15
Number : 16
Number : 17
Number : 18
Number : 19
Number : 20

4)控制回路

我们可以使用“中断”或者“继续”来控制循环。

Break 语句

对于'Break'语句,当我们在循环内使用'if'语句时,我们可以退出循环,而无需完成循环。

#!/bin/bash
# Basic loop use break
counter=10
until [ $counter -gt 20 ]
do
   echo Number : $counter
   if [ $counter -eq 15 ]
   then
       echo Done
       break
   fi
   ((counter++))
done
$bash break.sh
output
Number : 10
Number : 11
Number : 12
Number : 13
Number : 14
Number : 15
Done

Continue语句

对于“ Continue”语句,我们可以继续循环,而在循环内使用“ if”语句时无需完成循环。

#!/bin/sh
NUMS="1 2 3 4 5 6 7"
for NUM in $NUMS
do
   Q=`expr $NUM % 2`
   if [ $Q -eq 0 ]
   then
      echo "A number is an even number!!"
      continue
   fi
   echo "Found odd number"
done
$bash continue.sh
output
Found odd number
A number is an even number!!
Found odd number
A number is an even number!!
Found odd number
A number is an even number!!
Found odd number

5)select循环

选择while和while循环之类的循环,但可以创建一个简单的菜单系统。

select循环的语法

select var in <list>
do
<commands>
done

我们将提供三个选项,并使用“选择”循环从中进行选择。

#!/bin/bash
  # select script
  PS3='Please enter your choice: '
  options=("Option 1" "Option 2" "Option 3" "Quit")
  select opt in "${options[@]}"
  do
      case $opt in
          "Option 1")
              echo "you choose choice 1"
              ;;
          "Option 2")
              echo "you choose choice 2"
              ;;
          "Option 3")
              echo "you choose choice $REPLY which is $opt"
              ;;
          "Quit")
              break
              ;;
          *) echo "invalid option $REPLY";;
      esac
  done
$bash select.sh
output
1) Option 1
2) Option 2
3) Option 3
4) Quit
Please enter your choice: 1
you chose choice 1
Please enter your choice: 5
invalid option 5
Please enter your choice: 4