Linux shell编程学习笔记18:while循环语句

这篇具有很好参考价值的文章主要介绍了Linux shell编程学习笔记18:while循环语句。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

上回我们研究和探讨了Linux shell编程中for 循环语句,与在C/C++中一样,for 循环语句Linux shell编程中有很多灵活的用法。今天我们来研究和探讨while循环语句。

一、数字条件循环

我们继续以for循环语句中的例子,计算 从1到10与2的乘积 并输出。

(一)常规写法

1.在zsh命令行中

# csdn @ edu in ~ [20:35:57] 
$ i=1; while (( $i <= 10 )) ; do  echo "$i * 2 = $(expr $i \* 2)"; i=$(expr $i + 1); done
1 * 2 = 2
2 * 2 = 4
3 * 2 = 6
4 * 2 = 8
5 * 2 = 10
6 * 2 = 12
7 * 2 = 14
8 * 2 = 16
9 * 2 = 18
10 * 2 = 20

# csdn @ edu in ~ [20:36:21] 

Linux shell编程学习笔记18:while循环语句,Linux世界,麒麟操作系统,系统安全,linux,shell脚本,脚本编程,while,while语句,循环语句,学习笔记

2.在bash命令行中

[csdn ~]$ i=1; while (( $i <= 10 )) ; do  echo "$i * 2 = $(expr $i \* 2)"; i=$(expr $i + 1); done
1 * 2 = 2
2 * 2 = 4
3 * 2 = 6
4 * 2 = 8
5 * 2 = 10
6 * 2 = 12
7 * 2 = 14
8 * 2 = 16
9 * 2 = 18
10 * 2 = 20

Linux shell编程学习笔记18:while循环语句,Linux世界,麒麟操作系统,系统安全,linux,shell脚本,脚本编程,while,while语句,循环语句,学习笔记

3.注意

表达式 $(expr $i \* 2)     中 \* 前后要用空格与操作数分隔,表达式 i=$(expr $i + 1)  中 + 前后要用空格与操作数分隔,否则结果就会出错。

(二)使用++运算符来改变循环变量

对于经常使用i++、i--运算符的程序员来说,使用i=i+1多多少少有些别扭。

由于i++或++i是表达式而不是命令,所以我们在使用这种表达式时要变通一下。

1.通过let命令来使用++运算符

(1)在zsh命令行中

# csdn @ edu in ~ [21:08:50] 
$ i=1; while (( $i <= 10 )) ; do  echo "$i * 2 = $(expr $i \* 2)"; let i++; done
1 * 2 = 2
2 * 2 = 4
3 * 2 = 6
4 * 2 = 8
5 * 2 = 10
6 * 2 = 12
7 * 2 = 14
8 * 2 = 16
9 * 2 = 18
10 * 2 = 20

# csdn @ edu in ~ [21:09:03] 

 

Linux shell编程学习笔记18:while循环语句,Linux世界,麒麟操作系统,系统安全,linux,shell脚本,脚本编程,while,while语句,循环语句,学习笔记

 (2)在bash命令行中

[csdn ~]$ i=1; while (( $i <= 10 )) ; do  echo "$i * 2 = $(expr $i \* 2)"; let i++; done
1 * 2 = 2
2 * 2 = 4
3 * 2 = 6
4 * 2 = 8
5 * 2 = 10
6 * 2 = 12
7 * 2 = 14
8 * 2 = 16
9 * 2 = 18
10 * 2 = 20
[csdn ~]$ 

Linux shell编程学习笔记18:while循环语句,Linux世界,麒麟操作系统,系统安全,linux,shell脚本,脚本编程,while,while语句,循环语句,学习笔记

2.在循环条件表达式中用++修改循环变量值 

(1)在zsh命令行中

# csdn @ edu in ~ [21:21:29] 
$ i=1; while (( i++ <= 10 )) ; do  echo "$i * 2 = $(expr $i \* 2)"; done
2 * 2 = 4
3 * 2 = 6
4 * 2 = 8
5 * 2 = 10
6 * 2 = 12
7 * 2 = 14
8 * 2 = 16
9 * 2 = 18
10 * 2 = 20
11 * 2 = 22

# csdn @ edu in ~ [21:21:40] 

Linux shell编程学习笔记18:while循环语句,Linux世界,麒麟操作系统,系统安全,linux,shell脚本,脚本编程,while,while语句,循环语句,学习笔记

(2)在bash命令行中

[csdn ~]$ i=1; while (( i++ <= 10 )) ; do  echo "$i * 2 = $(expr $i \* 2)"; done
2 * 2 = 4
3 * 2 = 6
4 * 2 = 8
5 * 2 = 10
6 * 2 = 12
7 * 2 = 14
8 * 2 = 16
9 * 2 = 18
10 * 2 = 20
11 * 2 = 22
[csdn ~]$ 

Linux shell编程学习笔记18:while循环语句,Linux世界,麒麟操作系统,系统安全,linux,shell脚本,脚本编程,while,while语句,循环语句,学习笔记

3. 在循环条件表达式中利用 && 和 ++修改循环变量值 

(1)在zsh命令行中

# csdn @ edu in ~ [21:31:12] 
$ i=0; while (( i++ && i <= 10 )) ; do  echo "$i * 2 = $(expr $i \* 2)"; done

# csdn @ edu in ~ [21:38:46] 
$ i=0; while (( ++i && i <= 10 )) ; do  echo "$i * 2 = $(expr $i \* 2)"; done
1 * 2 = 2
2 * 2 = 4
3 * 2 = 6
4 * 2 = 8
5 * 2 = 10
6 * 2 = 12
7 * 2 = 14
8 * 2 = 16
9 * 2 = 18
10 * 2 = 20

# csdn @ edu in ~ [21:39:10] 

Linux shell编程学习笔记18:while循环语句,Linux世界,麒麟操作系统,系统安全,linux,shell脚本,脚本编程,while,while语句,循环语句,学习笔记

(2)在bash命令行中

[csdn ~]$ i=0; while (( i++ && i <= 10 )) ; do  echo "$i * 2 = $(expr $i \* 2)"; done
[csdn ~]$ i=0; while (( ++i && i <= 10 )) ; do  echo "$i * 2 = $(expr $i \* 2)"; done
1 * 2 = 2

2 * 2 = 4
3 * 2 = 6
4 * 2 = 8
5 * 2 = 10
6 * 2 = 12
7 * 2 = 14
8 * 2 = 16
9 * 2 = 18
10 * 2 = 20
[csdn ~]$ 

Linux shell编程学习笔记18:while循环语句,Linux世界,麒麟操作系统,系统安全,linux,shell脚本,脚本编程,while,while语句,循环语句,学习笔记

(3)注意

在上面的实例中,使用 i++ && i <= 10 作为循环条件表达式时,没有输出结果。

使用  ++i && i <= 10  作为循环条件表达式才能正确输出结果。

二、字符条件类循环

(一)实例1

我们先定义一个数组s=(b d 3 0),并以0作为最后一个数组元素,然后定义循环变量i并初始化,接着使用while循环逐一访问数组s的成员值并输出,如果成员值 是小写字母,就是输出提示is a lowercase letter,否则输出提示is not a letter,直到遇到最后一个数组元素0,循环结束。

1.zsh中

命令行为:

s=(b d 3 0); i=1; while [[ ${s[i]} != '0' ]] ; do if [[ ${s[i]} > 'a' && ${s[i]} < 'z' ]]; then echo ${s[i]} is a lowercase letter; else echo ${s[i]} is not a letter; fi; let i++; done

由于CSDN程序员研修院提供的linux环境不能让以上命令完整显示,所以我们分几行输入:

# csdn @ edu in ~ [12:23:33] 
$ s=(b d 3 0); i=1; while [[ ${s[i]} != '0' ]] ; 
while> do if [[ ${s[i]} > 'a' && ${s[i]} < 'z' ]]; then echo ${s[i]} is a lowercase letter; else echo ${s[i]} is not a letter; fi; 
while> let i++;
while> done
b is a lowercase letter
d is a lowercase letter
3 is not a letter

# csdn @ edu in ~ [12:24:31] 

 Linux shell编程学习笔记18:while循环语句,Linux世界,麒麟操作系统,系统安全,linux,shell脚本,脚本编程,while,while语句,循环语句,学习笔记

注意:在zsh中,数组下标是从1开始的。所以上例中数组下标变量i的初始值为1。

2.在bash中

s=(b d 3 0); i=0; while [[ ${s[i]} != '0' ]] ; do if [[ ${s[i]} > 'a' && ${s[i]} < 'z' ]]; then echo ${s[i]} is a lowercase letter; else echo ${s[i]} is not a letter; fi; let i++; done

user @ host : ~ $ s=(b d 3 0); i=0; while [[ ${s[i]} != '0' ]] ; do if [[ ${s[i]} > 'a' && ${s[i]} < 'z' ]]; then echo ${s[i]} is a lowercase letter; else echo ${s[i]} is not a letter; fi; let i++; done
b is a lowercase letter
d is a lowercase letter
3 is not a letter
user @ host : ~ $ ^C

Linux shell编程学习笔记18:while循环语句,Linux世界,麒麟操作系统,系统安全,linux,shell脚本,脚本编程,while,while语句,循环语句,学习笔记

注意:在bash中,数组下标是从0开始的。所以上例中数组下标变量i的初始值为0。

(二)实例2

定义字符串s=abcd0,初始化循环变量i,然后从i开始截取字符串s值并输出,直到截取的字符串为0时结束循环。

1.在bash命令行中执行成功

[csdn ~]$ s=abcd0; i=0; while [[ ${s:i} != '0' ]] ; do echo ${s:i}; let i++; done 
abcd0
bcd0
cd0
d0
[csdn ~]$ 

Linux shell编程学习笔记18:while循环语句,Linux世界,麒麟操作系统,系统安全,linux,shell脚本,脚本编程,while,while语句,循环语句,学习笔记

2.在zsh中执行不成功

(1)在zsh命令行执行不成功

# csdn @ edu in ~ [13:03:22] 
$ s=abcd0; i=1; while [[ ${s:i} != '0' ]] ; do echo ${s:i}; let i++; done
zsh: unrecognized modifier `i'

# csdn @ edu in ~ [13:03:26] C:1
$ s=abcd0; i=1; while [[ ${s:$i} != '0' ]] ; do echo ${s:i}; let i++; done
zsh: unrecognized modifier `i'

# csdn @ edu in ~ [13:03:32] C:1
$ s=abcd0; i=1; while [[ ${ s:${i} } != '0' ]] ; do echo ${s:i}; let i++; done
zsh: bad substitution

# csdn @ edu in ~ [13:03:54] C:1
$ s=abcd0; i=1; while [[ ${s:${i}} != '0' ]] ; do echo ${s:i}; let i++; done 
zsh: unrecognized modifier `i'

# csdn @ edu in ~ [13:04:01] C:1
$ s=abcd0; i=1; while (( ${s:${i}} != '0' )) ; do echo ${s:i}; let i++; done
zsh: bad math expression: operand expected at `'0' '

# csdn @ edu in ~ [13:04:11] 
$ s=abcd0; i=1; while (( ${s:i} != '0' )) ; do echo ${s:i}; let i++; done 
zsh: unrecognized modifier `i'

# csdn @ edu in ~ [13:04:22] 
$ s=abcd0; i=1; while (( ${s:$i} != '0' )) ; do echo ${s:i}; let i++; done
zsh: bad math expression: operand expected at `'0' '

# csdn @ edu in ~ [13:04:30] 

Linux shell编程学习笔记18:while循环语句,Linux世界,麒麟操作系统,系统安全,linux,shell脚本,脚本编程,while,while语句,循环语句,学习笔记

(2)写入脚本文件在zsh中执行出错

# csdn @ edu in ~ [14:50:09] C:126
$ echo '#!/bin/zsh' > a.sh

# csdn @ edu in ~ [14:50:51] 
$ echo i=1 >> a.sh

# csdn @ edu in ~ [14:50:51] 
$ echo 'while [[ ${s:i} != '0' ]]' >> a.sh 

# csdn @ edu in ~ [14:50:51] 
$ echo do  >> a.sh

# csdn @ edu in ~ [14:50:51] 
$ echo 'echo ${#s:i}'  >> a.sh

# csdn @ edu in ~ [14:50:51] 
$ echo 'let i++;'   >> a.sh

# csdn @ edu in ~ [14:50:51] 
$ echo done >> a.sh 

# csdn @ edu in ~ [14:50:53] 
$ cat a.sh
#!/bin/zsh
i=1
while [[ ${s:i} != 0 ]]
do
echo ${#s:i}
let i++;
done

# csdn @ edu in ~ [14:50:57] 
$ . ./a.sh
./a.sh:3: unrecognized modifier `i'

Linux shell编程学习笔记18:while循环语句,Linux世界,麒麟操作系统,系统安全,linux,shell脚本,脚本编程,while,while语句,循环语句,学习笔记

我们利用echo 配合输出重定向创建了脚本文件a.sh,但脚本文件a.sh也没运行成功。

三、无限循环

我们用无限循环每隔30秒显示提示信息 press Ctrl+C to exit,在用户按下Ctrl+C后结束循环。 

(一)用true作为循环表达式

1.在zsh命令行执行

# csdn @ edu in ~ [15:06:21] 
$  while true; do echo 'press Ctrl+C to exit'; sleep 30s; done
press Ctrl+C to exit
press Ctrl+C to exit
press Ctrl+C to exit
press Ctrl+C to exit
^C%                                                                                                                                                                                              

# csdn @ edu in ~ [15:08:23] C:130

Linux shell编程学习笔记18:while循环语句,Linux世界,麒麟操作系统,系统安全,linux,shell脚本,脚本编程,while,while语句,循环语句,学习笔记

2.在bash命令行执行

[csdn ~]$ while true; do echo 'press Ctrl+C to exit'; sleep 30s; done
press Ctrl+C to exit
press Ctrl+C to exit
^C
[csdn ~]$ 

Linux shell编程学习笔记18:while循环语句,Linux世界,麒麟操作系统,系统安全,linux,shell脚本,脚本编程,while,while语句,循环语句,学习笔记

在上面的例子中,为了避免提示信息 press Ctrl+C to exit 刷屏,我们使用了命令:

sleep 30s

来等待30秒钟。

(二)使用冒号(:) 作为循环表达式

1.冒号(:)表达式或命令的作用

在Linux中,冒号(:) 有很多种用法,其中之一是作为空表达式或空命令,返回值为0。

我们可以创建一个包含以下两条命令的脚本文件a.sh 来观察冒号(:)作为空命令执行时的返回值(保存在$?中)。

:

echo $?

脚本文件创建和执行情况:

# csdn @ edu in ~ [15:22:38] 
$ echo ':' > a.sh      

# csdn @ edu in ~ [15:23:20] 
$ echo 'echo $?'>> a.sh

# csdn @ edu in ~ [15:23:27] 
$ cat a.sh
:
echo $?

# csdn @ edu in ~ [15:23:33] 
$ . ./a.sh             
0

# csdn @ edu in ~ [15:23:36] 

Linux shell编程学习笔记18:while循环语句,Linux世界,麒麟操作系统,系统安全,linux,shell脚本,脚本编程,while,while语句,循环语句,学习笔记

2.在zsh命令行执行

# csdn @ edu in ~ [15:08:23] C:130
$  while : ; do echo 'press Ctrl+C to exit'; sleep 30s; done
press Ctrl+C to exit
press Ctrl+C to exit
press Ctrl+C to exit
^C%                                                                                                                                                                                              

# csdn @ edu in ~ [15:12:29] C:130

Linux shell编程学习笔记18:while循环语句,Linux世界,麒麟操作系统,系统安全,linux,shell脚本,脚本编程,while,while语句,循环语句,学习笔记

3.在bash命令行执行

# csdn @ edu in ~ [15:13:11] C:130
$ exec bash
[csdn ~]$ while : ; do echo 'press Ctrl+C to exit'; sleep 30s; done
press Ctrl+C to exit
press Ctrl+C to exit
^C
[csdn ~]$ 

Linux shell编程学习笔记18:while循环语句,Linux世界,麒麟操作系统,系统安全,linux,shell脚本,脚本编程,while,while语句,循环语句,学习笔记

一般推荐使用冒号(:) 作为循环表达式的无限循环,因为使用冒号(:)命令系统资源开销更小。文章来源地址https://www.toymoban.com/news/detail-738280.html

到了这里,关于Linux shell编程学习笔记18:while循环语句的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Linux shell编程学习笔记20:case ... esac、continue 和break语句

    在实际编程中,我们有时会请到多条件多分支选择的情况,用if…else语句来嵌套处理不烦琐,于是JavaScript等语言提供了多选择语句switch ... case。与此类似,Linux Shell脚本编程中提供了case...in...esac 语句,来实现多条件多分支选择结构:其语法结构为:   case 变量名 in 值1[|值

    2024年02月05日
    浏览(38)
  • Python编程——while循环语句讲解

    作者: Insist-- 个人主页: insist--个人主页 本文专栏: python专栏 专栏介绍: 本专栏为 免费 专栏,并且会持续更新python基础知识,欢迎各位订阅关注。 目录 一、怎么理解循环? 二、while语句基础格式 三、例子 例题:使用while语句输出1~100的所有数字 四、break 语句 例题:在

    2024年02月15日
    浏览(29)
  • Linux:Linux操作系统循环语句-while语句使用介绍

    本博客将介绍Linux操作系统中循环语句-while语句的使用方法。我们将详细说明while语句的语法格式,并提供多个案例来演示不同的应用场景。这些案例包括输出数字序列、批量创建用户以及内置跳出循环的用法。通过学习这些内容,您将能够更好地掌握Shell脚本编写中的循环控

    2024年02月09日
    浏览(45)
  • 【Linux脚本篇】Linux循环语句-while

    目录 🍁while的语法格式 🍁while循环案例 🍃案例一:输出10-1的降序 🍃案例二:输出10的升序和降序 🍃案例三:批量创建用户 🍁内置跳出循环 🍃案例一:exit退出脚本 🍃案例二:break跳出本次循环 🍃案例三:continue结束本次循环    🦐博客主页:大虾好吃吗的博客    🦐

    2024年02月08日
    浏览(38)
  • shell编程之循环语句与函数

    (1)将命令序列按格式写在一起 (2)可方便重复使用命令序列 (1)使用函数可以避免代码冲突 (2)将大的工程可以分割为若干小的功能模块,代码的可读性更强 3.1方式1: [function] 函数名 () { 命令系列 [return x]————————使用return或exit可以显示地结束函数 } 3.2方

    2024年02月07日
    浏览(30)
  • Linux系统Shell脚本第三章:for、while循环及脚本实操

    目录 一、for循环 1、基本格式 2、类C语言格式 二、while循环 1、基本格式 2、死循环语句 三、跳出循环 1、continue跳出循环 2、break跳出循环 四、常用循环脚本实例 1、循环打印9*9乘法表 2、循环ping测试某个网段网络连通性 3、while死循环实现猜数字游戏 用于已知循环次数的场景

    2024年01月16日
    浏览(33)
  • Linux shell编程学习笔记25:tty

    在 1830 年代和 1840 年代,开发了称为电传打字机(teletypewriters)的机器,这些机器可以将发件人在键盘上输入的消息“沿着线路”发送在接收端并打印在纸上。 电传打字机的名称由teletypewriters, 缩短为teletypes,并最终缩短为 TTY。 电传打字机:teletypewriters →  teletypes → t

    2024年02月05日
    浏览(44)
  • Linux shell编程学习笔记35:seq

    在使用 for 循环语句时,我们经常使用到序列。比如: for i in 1 2 3 4 5 6 7 8 9 10; do echo \\\"$i * 2 = $(expr $i * 2)\\\";  done 其中的 1 2 3 4 5 6 7 8 9 10; 就是一个整数序列 。 为了方便我们使用数字序列,Linux提供了seq命令,这个命令是取自单词 sequence 的前3个字母。比如: for i in $(seq 1 10) ;

    2024年02月04日
    浏览(36)
  • Linux shell编程学习笔记27:tput

    除了stty命令,我们还可以使用tput命令来更改终端的参数和功能。 tput 命令的主要功能有:移动更改光标、更改文本显示属性(如颜色、下划线、粗体),清除屏幕特定区域等。  tput [选项] [参数] 命令格式:   tput setab n : 设置背景色,set text attributes background color   tput

    2024年02月05日
    浏览(39)
  • Linux shell编程学习笔记29:shell自带的 脚本调试 选项

    Linux shell脚本的调试方法比较多,上次我们探讨和测试了shell内建命令set所提供的一些调试选项,其实 shell 本身也提供了一些调试选项。我们以bash为例来看看。 purleEndurer @ csdn ~ $ bash --help GNU bash, version 4.2.46(2)-release-(x86_64-redhat-linux-gnu) Usage:  bash [GNU long option] [option] ...      

    2024年02月04日
    浏览(40)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包