在Bash中编写循环
如何在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