【LinuxShell】Shell编程之循环语句


前言

  循环(Loop)是计算机编程中非常重要的一种结构,其主要目的是为了简化代码编写,提高代码的重复利用率,以及提高程序的效率。

一、循环

1.循环的作用

  • 重复执行代码:通过使用循环,可以在程序中重复执行一段代码,从而避免代码的重复编写,
    减少程序代码量,提高程序的可读性和可维护性。

  • 简化程序逻辑:使用循环可以使程序逻辑更加简洁明了,提高程序的可读性和可理解性,降低代码出错的可能性。

  • 提高代码的重复利用率:通过将重复的代码封装在循环结构中,可以提高代码的重复利用率,减少代码冗余。

  • 提高程序的效率:循环可以让程序自动化地执行重复任务,从而减少人工干预的次数,提高程序的效率和性能。

2.循环和遍历

  循环(Loop)和遍历(Traversal)是两个在计算机编程中经常使用的概念。

  循环是一种重复执行一段代码的结构。通过循环,可以在满足一定条件的情况下,多次执行相同的代码。循环语句通常包括一个循环体(Loop Body)和一个循环条件(Loop Condition),当循环条件满足时,循环体会被执行,否则循环结束。

  而遍历是指对一组数据结构中的每个元素进行一次访问的过程。在计算机编程中,常常需要对数组、列表、树等数据结构中的每个元素进行遍历,以便对它们进行操作或者输出。

  循环是一种控制流程的结构,用于重复执行一段代码,而遍历是一种数据操作的过程,用于访问并处理数据结构中的每个元素。在某些情况下,循环和遍历可以结合使用,以便在循环中遍历数据结构并对其进行操作。

二、for循环语句

1.for语句的用法

  • 读取不同的变量值,用来逐个执行同一组命令。
  • for循环经常使用在已经知道要进行多少次循环的场景。
  • 使用for循环语句时,需要指定一个变量及可能的取值列表,针对每一个不同的取值重复执行相同的命令序列,直到变量值用完退出循环。在这里,“取值列表”称为for语句的执行条件,其中包括多个属性相同的对象,需要预定指定。

2.for逻辑结构

在这里插入图片描述

  for语句的执行流程:首先将循环列表中的元素赋值给变量,每次赋值便执行一次循环,done就标志着一个循环的结束。直到列表中的元素消耗殆尽,结束整个循环。

3.for语句的格式

一般格式

for 变量 in 取值列表
do
  命令序列
done

注:变量可以不加$in 取值列表可以不写。

类C语言格式

for ((expr1;expr2;expr3))
do
  命令序列
done

expr1:定义变量并赋初值
expr2:决定是否循环
expr3:决定循环变量如何改变,决定循环什么时候退出

死循环

for ((;;))
do
  命令序列
done

4.echo的用法

echo -n 表示不换行输出。
echo -e 输出转义字符,将转义后的内容输出到屏幕上

只有加了-e才能执行下面的转义符:

常用的转义字符如下:

转义符含义
\b转义后相当于按退格键(backspace),但前提是"\b"后面存在字符;“\b"表示删除前一个字符,”\blb"表示删除前两个字符
\c不换行输出,在"\c"后面不存在字符的情况下,作用相当于echo -n;但是当"\c"后面仍然存在字符时,"\c"后面的字符将不会被输出
\n换行,被输出的字符从"\n"处开始另起一行。
\f换行,但是换行后的新行的开头位置连接着上一行的行尾;\v 与\f相同
\t转以后表示插入tab,即横向制表符
\r光标移至行首,但不换行,相当于使用"\r"以后的字符覆盖"\r"之前同等长度的字符;但是当"\r"后面不存在任何字符时,"\r"前面的字符不会被覆盖
\\表示插入"\"本身

5.for语句的典型案列

为用户批量添加密码,用户信息保存在opt/目录下。

[root@localhost ~]# vim user.sh
#!/bin/bash
for i in $(cat /opt/user.txt )
do
 useradd $i
 echo 123456 | passwd --stdin $i
done
[root@localhost ~]# bash user.sh
更改用户zhangsan的密码。
passwd:所有的身份验证令牌己经成功更新。
更改用户lisi的密码 。
passwd:所有的身份验证令牌已经成功更新。
更改用户wangwu的密码。
passwd:所有的身份验证令牌已经成功更新。
更改用户zhaoliu的密码。
passwd:所有的身份验证令牌己经成功更新。

画一条直线

[root@localhost ~]# vim abc.sh
for ((i=1;i<=9;i++))
do
   echo "*"
done
~   
[root@localhost ~]# bash abc.sh
*
*
*
*
*
*
*
*
*

九九乘法表

[root@localhost ~]# vim sum.sh
for ((i=1;i<=9;i++))
do
  for ((j=1;j<=i;j++))
   do
      echo -ne "$i*$j=$(($i*$j))\t"
   done
echo
done
[root@localhost ~]# bash sum.sh
1*1=1	
2*1=2	2*2=4	
3*1=3	3*2=6	3*3=9	
4*1=4	4*2=8	4*3=12	4*4=16	
5*1=5	5*2=10	5*3=15	5*4=20	5*5=25	
6*1=6	6*2=12	6*3=18	6*4=24	6*5=30	6*6=36	
7*1=7	7*2=14	7*3=21	7*4=28	7*5=35	7*6=42	7*7=49	
8*1=8	8*2=16	8*3=24	8*4=32	8*5=40	8*6=48	8*7=56	8*8=64	
9*1=9	9*2=18	9*3=27	9*4=36	9*5=45	9*6=54	9*7=63	9*8=72	9*9=81

三、while循环语句

1.while语句的用法

  for循环语句非常适用于列表对象无规律,且列表来源已固定(如某个列表文件)的场合。而对于要求控制循环次数、操作对象按数字顺序编号、按特定条件执行重复操作等情况,则更适合使用另一种循环——while语句。

  while循环一般用于有条件判断的循环,若判断条件为真,则进入循环,当条件为假就跳出循环

2.while逻辑结构

在这里插入图片描述

  while语句的执行流程:先对定义的条件进行判断,如果该条件成立,就进入循环,执行 while 循环体中的语句,也就是 do 和 done 之间的语句。这样就完成了一次循环。每一次执行到 done 的时候都会重新判断条件是否成立,如果成立,就进入下一次循环,继续执行 do 和 done 之间的语句,如果不成立,就结束整个 while 循环,执行 done 后面的其它 Shell 代码。如果一开始条件就不成立,那么程序就不会进入循环体,do 和 done 之间的语句就没有执行的机会。

  注意,在 while 循环体中必须有相应的语句使得条件越来越趋近于“不成立”,只有这样才能最终退出循环,否则 while 就成了死循环,会一直执行下去,永无休止。

3.while语句的格式

一般格式

定义变量
while 表达式(条件)
do
循环语句命令
done

死循环

while  [1 -eq 1]  		 #判断条件写一个永久为真的条件 
do      				 #一直执行do内的命令
done

while  true       		 #直接写判断条件为真
do                       #一直执行do内的命令
done

while :                  #判断条件为冒号也表示死循环
 do                      #一直执行do内的命令
 done

4.while语句的典型案例

批量建立用户

#!/bin/bash
i=0
while [ "${i}" -le 20 ]
do
	useradd stu${i}
	echo "123456" |passwd --stdin stu${i} &>/dev/null
	if [ $? -eq 0 ]
	then
		echo "用户 stu${i} 被建立"
	else
		echo "用户 stu${i} 建立失败"
	fi
	let i++
done

批量删除用户

#!/bin/bash
i=0
while [ "${i}" -le 20 ]
do
	userdel -r stu${i}
	let i++
done

猜价格游戏

#!/bin/bash
p=`echo $[RANDOM%1000+1]`
t=0

while true
do
	read -p "请输入商品的价格1-1000:" num
	let t++
	if [ $num -eq $p ]
	then
		echo "恭喜你猜中了,实际价格是$p"
		echo "一共猜了${t}次"
		exit 0
	elif [ $num -gt $p ]
	then
		echo "猜的价格高了" 
	else
		echo "猜的价格低了"
	fi
done

四、until命令

1.until语句的用法

  until循环执行一系列命令直至条件为真时停止。until循环与while循环在处理方式上刚好相反。一般while循环优于until循环,但在某些时候—也只是极少数情况下,until循环更加有用。

2.until逻辑结构

在这里插入图片描述

  until语句的执行流程:先对定义的条件进行判断,如果该条件不成立,就进入循环,执行 until 循环体中的语句,也就是 do 和 done 之间的语句。这样就完成了一次循环。每一次执行到 done 的时候都会重新判断条件是否成立,如果还是不成立,就进入下一次循环,继续执行 do 和 done 之间的语句,如果成立了,就结束整个 until 循环,执行 done 后面的其它 Shell 代码。如果一开始条件就成立,那么程序就不会进入循环体,do 和 done 之间的语句就没有执行的机会。

3.until语句的格式

until  [ 条件测试操作 ]
do
	判断式/命令序列
done

4.until语句的典型案例

[root@localhost opt]# vim until.sh
i=0
sum=0
until [ $i -gt 10 ]
do
    echo $i
    let i++
    sum=$(($sum+$i))
done

五、控制循环流程命令

1.break

  在循环内部,当执行到 break 命令时,会立即跳出当前的循环,停止循环执行,然后继续执行下一条指令。可以使用 break 命令来提前终止循环,例如当达到特定条件时或者已经执行了足够的次数。

[root@localhost opt]# vim break.sh
#!/bin/bash 
for j in {1..3}        					##第一层for循环,j=1,2,3各执行一次do的内容  
do               					    ##第一层for循环的执行内容       
    for i in {1..5}     				##第二层for循环,i=1,2,3,4,5各执行一次do的内容
    do          					    ##第二层for循环的执行内容           
        if [ $i -eq 3 ]  				##第二层for循环中添加的if判断语句,当$i=3是执行then内容
        then                			##第二层for循环判断语句执行命令,break控制循环的流程
       		break 2         
		fi               		 		##if语句结束
    echo "$i"         					##第二层for循环语句执行每循环一次输出$i
    done             					##第二层for循环语句结束标志                   
done     								##第一层for循环语句结束标志                                           

2.continue

  在循环内部,当执行到 continue 命令时,会跳过本次循环剩余的代码,并继续下一次循环。可以使用 continue 命令来跳过循环中的某些操作,例如在特定条件下跳过一次循环,或者只执行符合条件的循环。

[root@localhost opt]# vim continue.sh
#!/bin/bash
for i in [1..5]
do
   if [ $i -eq 2 ]
   then
       continue
   fi
   echo "$i"
done
[root@localhost opt]# vim continue.sh
1
3
4
5

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
### 回答1: Linux Shell脚本编程是指在Linux系统中,使用Shell编写程序脚本,以实现一系列自动化任务。ShellLinux系统中的命令解释器,它能够执行用户输入的命令,并将结果输出到终端上。 在Shell脚本编程中,我们可以使用各种Shell命令、变量、条件判断、循环语句等来编写脚本,以实现自动化任务的目的。Shell脚本可以自动执行一系列命令,可以将多个命令组合成一个任务,还可以实现各种系统管理和监控功能。 Shell脚本编程Linux系统中是非常常见的技能之一,它可以提高系统管理效率,减少人工操作错误的可能性,是Linux系统管理员必备的技能之一。学习Shell脚本编程需要对Linux系统有一定的了解,同时需要熟悉Shell编程语言,学习过程中需要掌握Shell脚本的基本语法、命令、变量和函数等内容。 ### 回答2: Linux shell脚本编程是一种编写脚本的语言,可以自动完成重复性任务和批量处理命令。shell脚本能够在Linux环境下运行,但并不仅仅适用于Linux,而是适用于所有类Unix系统。 shell有多种,如Bourne shell(sh)、C shell(csh)、Korn shell(ksh)等等,Linux系统内置的默认shell是bash(Bourne-again shell),因此,大多数时候我们所说的shell实际上是指bash。 在Linux系统中,我们在终端上敲命令的过程实际上就是在执行shell脚本。在实际应用中,我们可以通过shell脚本在终端上一次性批量执行多个命令,同时,我们也可以根据需要把这些命令写在一个脚本文件中,再通过执行脚本文件来实现执行多个命令的目的。 另外,shell脚本还可以使命令自动完成特定的重复性操作,如备份、文件整理、文件批量转换等,从而提高工作效率。 在编写shell脚本时,我们需要掌握一些基本的语法规则、变量、运算符和流程控制语句等等。例如: - 变量的定义:用$符号定义变量,如a=10,则变量a的值为10。使用变量时需要用$符号引用,如echo $a会输出10。 - 运算符:shell脚本支持多种运算符,如算术运算符(+、-、*、/、%)、字符串运算符(=、!=、-z等)等等。 - 流程控制语句:if-else、for、while等,用来实现条件判断和循环操作等。 总的来说,Linux shell脚本编程是非常实用的技能,尤其是在涉及到批量操作的场景下。掌握好shell脚本的语法规则和常用命令,可以有效提高工作效率,节省时间和精力。 ### 回答3: Linux shell脚本编程,是一种基于命令行的编程方式,用于自动化管理和控制Linux操作系统。它可以让我们通过编写一系列的命令和操作,快速地完成系统管理、批量操作和数据处理等任务,极大地提高我们的工作效率和精度。 Linux shell脚本编程主要基于bash shell,它是Linux系统默认的命令行解释器。因此,我们只需要掌握bash shell的基本语法和常用命令,就能进入Linux shell编程的世界。 Linux shell脚本编程的核心是脚本文件,它是一组命令和操作的集合,可以根据需要执行。脚本文件的扩展名通常为.sh。我们可以通过一些编辑器如vim、gedit、nano等来编写脚本文件。脚本文件中的命令和操作,以特定的格式书写,可以通过在命令行终端运行脚本文件来执行。 在shell脚本编程中,变量和运算符是很重要的概念。变量用于保存程序中需要使用的数据,可以是数字、字符、字符串等。运算符用于对变量和常量进行运算,包括算术、比较和逻辑运算。在脚本中,我们可以使用if-else语句、循环语句等控制结构来实现程序逻辑。 此外,Linux shell脚本编程还涉及到正则表达式和管道符等概念。正则表达式可以用来匹配文本或验证数据格式,管道符则可实现多个命令之间的数据传输和协作。 总而言之,通过学习和应用Linux shell脚本编程,我们可以轻松实现系统管理、数据处理、批量操作等任务,并且可以根据需要扩展自己所用的命令和脚本,感受到编程的快乐。同时,Shell脚本编程也是Linux系统管理和运维领域必备的技能之一。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

我的宝贝大唐

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值