首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

第三十章 : 流程控制:whileuntil 循环

在前面的章节,我们开发了菜单驱动程序,来产生各种各样系统信息。虽然程序能够运行,但它仍然存在重大可用性问题。它只能执行单一选择,然后终止。...第四步到第七步形成一个循环。重复执行循环内动作直到满足条件“切完整个胡萝卜”。 while bash can express a similar idea....也有可能把标准输入管道到循环中。 #!...这里我们接受 sort 命令标准输出,然后显示文本流。然而,因为管道将会在子 shell 执行循环,当循环终止时候,循环中创建任意变量或赋值变量都会消失,记住这一点很重要。...loops: Linux 文档工程 Bash 初学者指南一书中介绍了更多 while 循环实例: http://tldp.org/LDP/Bash-Beginners-Guide/html

34810
您找到你想要的搜索结果了吗?
是的
没有找到

Shell 开发经验总结()

3)使用rm前确认 删除前备份删除对象信息,避免使用变量,直接使用文件和目录名; 如果必须使用时,删除前,建议检查避免误删,删除目录和文件信息保留: 建议禁用find遍历根目录进行查找,同时删除前进行确认...4)For循环坑 for循环in条件按空格来区分,避免进入不正确或死循环。 5)while循环禁忌 如果还想使用循环中变量,不要while结合管道使用。...在较新bash你可以用下面的方法来代替,[[ ]]关键字能正确处理空白、空格、带横线等问题。...另注意,[[适用于字符串,如果是数值,要用:(( $var > 8 )) 9)管道操作不要同时读写文件 你不能在同一条管道操作同时读写一个文件。...根据管道实现方式,file要么被截断成0字节,要么会无限增长直到填满整个硬盘。如果想改变原文件内容,只能先将输出写到临时文件再用mv命令。

50310

Shell Style Guide

不要使用命令名做函数名,test。 函数名之后必须有圆括号(函数名和圆括号之间没有空格)。 左大括号在函数名后另起一行,不与函数名放于同一行(适配于匿名函数)。...变量使用前最好做初始化动作,以防环境相同名称变量被脚本内引用,出现不可预知情况。 循环中变量名应该和正在被循环变量名保持相似的名称。...,搜索aaa2bccc2和b 正例: echo "aaa2bccc" | grep -Eo "2|b" 反例: echo "aaa2bccc" | grep -Eo "2 | b" 分组命令 Bash...反例: # 以下设置内容及成功与否并不明确 eval $(set_my_variables) 慎用管道连接while循环 使用进程替换或者for循环,而不是通过管道连接while循环。...这是因为在管道之后while环中,命令是在一个子shell运行,因此对变量修改是不能传递给父shell。 这种管道连接while环中隐式子shell使得bug定位非常困难。

7.5K10

Bash概论 - Linux系列教程补充篇

、快捷操作、管道、标准输入输出、软件安装、Docker、Conda、定期备份、配置信息查询、awk、sed、vim)补充。...#: 行注释 $: 变量表达式,变量解析&: 在后台执行命令,在for循环中也可用作命令分割符,取代done前面的; Bash变量 1....可以把设置保存到.bashrc或.bash_profile, 成为永久环境变量。 环境变量不限于我们之前讲过可执行程序环境变量、动态库、Python模块环境变量,任何变量都可以。...替换var中和pattern匹配最长模式串 个人最常用是最后一个,常用于for循环中。..., 则读取参数到内置变量OPTARG 内置变量OPTIND保存着将被处理命令行参数(位置参数)数值选项列表处理完毕getopts返回1, 否则返回0 : 在我们推出一步绘图脚本里面,就是使用Bash

1.2K70

SHELL(bash)脚本编程六:执行流程

在将编辑缓冲区内容交给bash之前,Readline会执行历史扩展(见这里),之后bash负责将本条命令存储到历史列表并进入下一步骤。 非交互模式 在非交互模式下,输入一般来自文件。...解析 解析阶段主要工作为:词法分析和语法解析 词法分析指分析器Readline或其他输入获取字符行,根据元字符将它们分割成word,并根据上下文环境标记这些word(确定单词类型)。...复合命令 bash每种复合命令都使用一个C函数来实现,功能包括执行恰当展开(for循环中关键词in后面的单词),执行特定命令,根据命令返回值来变更执行流程等等。...管道命令 对于管道命令,管道两侧命令会在不同两个子进程执行。 此时命令要先后经历 1、fork()系统调用创建子进程。 2、连接管道 然后命令执行步骤如下述简单命令执行。...5、如果hash表无缓存记录,则搜索环境变量PATH值中所有目录内文件,如果找到该名称文件,则执行(并缓存至hash表);如果未找到,则返回错误信息,设置返回值为127并exit。

1.6K40

SHELL(bash)脚本编程二:语法

除首行外,其余行以符号#开头单词及本行此单词之后字符将作为注释,被解析器所忽略。 语法 相比于其他更正式语言,bash语法较为简单。...大多数使用bash的人员,一般都先拥有其他语言语法基础,在接触bash语法之后,会自然将原有语法习惯套用到bash来。...管道两侧命令均在子shell(subshell)执行,这里需要注意:在子shell对变量进行赋值时,父shell是不可见。...shell会把命令输出作为命令替换扩展之后结果使用。 命令替换可以嵌套。 2、{ list; } list将在当前shell环境执行,必须以换行或分号为结尾(即使只有一个命令)。...break和continue两个内置命令可以用于for、while、until循环中,分别表示跳出循环和停止本次循环开始下一次循环。

1.3K20

Python快速学习第十天

当程序标准输入读取数据时,你可以通过输入或者使用管道把它和其他程序标准输出链接起来提供文本(管道是标准UNIX概念)。   要打印文本保存在sys.stdout内。...11.2.2 管式输出 在UNIXshell(就像GUN bash),使用*管道*可以在一个命令后面续写其他多个命令,就像下面这个例子(假设是GUN bash)。...http://www.cygwin.com 上面有更多信息。在Mac OS X,是通过Terminal程序,可以使用shell文件。 这个管道由以下三3个命令组成。...如果要尝试实现以上功能,则应该把filename变量设置为一个实际文件名。 11.3.1 按字节处理 最常见对文件内容进行迭代方法是在while环中使用read方法。...在Python近几个版本(2.2开始),文件对象是可迭代,这就意味着可以直接在for循环中使用它们,从而对它们进行迭代。代码清单11-12所示,很优雅,不是吗?

1.2K60

运维老司机实战 Shell 开发经验总结

9)对于打包后还需进行压缩文件,建议使用管道进行处理,: ? 不建议两部分分开执行: ?...5)while循环禁忌 如果还想使用循环中变量,不要while结合管道使用。 ? 6)慎用cp 这句话基本上正确,但同样有空格分词问题。所以应当用双引号: ?...在较新bash你可以用下面的方法来代替,[[ ]]关键字能正确处理空白、空格、带横线等问题。 ?...另注意,[[适用于字符串,如果是数值,要用:(( $var > 8 )) 9)管道操作不要同时读写文件 ? 你不能在同一条管道操作同时读写一个文件。...目录文件过多,会报参数太长错误无法删除,建议放在循环中遍历删除: ?

1K30

shell脚本专题(05):传参

二、本文前言 本文是该专题第五篇。 文章主要介绍如何在脚本执行时传参、如何对传入参数做基本处理、如何处理选项、怎样执行用户输出。...\$和\$@都可以获取到左右传入参数,区别是 \$\变量会将所有参数当成单个参数,而 \$@变量会单独处理每个参数。.../bin/bash i=1 while [ -n "$1" ] do echo "参数$i = $1" i=$[ $i + 1 ] shift done [root@shell param]...6.用户输入 6.1基本读取 使用read可以标准输入(键盘)或另一个文件描述符接受输入,在收到输入后, read 命令会将数据放进一个变量。...本例使用 read 命令来读取文件数据,对文件使用 cat 命令,将结果通过管道直接传给含有 read while 命令,也可以使用输出重定向方式,参见shell脚本专题(04):循环中“2.批量新增用户

82211

Linux:中使用getopts处理脚本参数

本文将详细讲解如何在Linux脚本中使用getopts来处理脚本参数,并通过示例来展示其实际应用。 一、getopts概述 getopts是一种用于解析命令行参数工具。...与getopt不同是,getopts是Shell内建命令,不需要额外安装。getopts可以处理短选项(-a)和带参数选项(-b value),但不支持长选项(--help)。...调用getopts: 在while环中调用getopts,逐个处理选项。 处理选项: 使用case语句根据选项进行相应处理。 处理非法选项。.../bin/bash # 初始化变量 a_flag=0 b_value="" c_flag=0 # 解析命令行选项 while getopts "ab:c" opt; do case $opt in...:处理非法选项,输出错误信息并退出。 :):处理缺少参数选项,输出错误信息并退出。 打印解析结果: 解析完成后,打印选项状态和参数值。

7910

一文入门Shell编程

在类 Unix 操作系统( Linux、macOS、FreeBSD),用户可以通过终端或终端仿真器与 Shell 交互。...Shell 提供了一个交互式命令行界面,用户可以直接输入命令并获取系统响应。此外,Shell 还可以执行脚本,这些脚本是一系列预定义命令集合,以一种有序方式执行。...管道和命令替换unsetunset 管道: 将一个命令输出作为另一个命令输入。 ls -l | grep ".txt" 命令替换: 将命令输出赋值给变量。...调试脚本unsetunset set -x: 在脚本添加 set -x 可以启用调试模式,显示每个命令执行详细信息。 #!...高级控制结构: 学习更复杂控制结构和算法, case 语句和循环中高级用法。 系统管理任务: 学习如何使用 Shell 编程执行系统管理任务,日志处理、备份和定时任务。

10310

异步,同步,阻塞,非阻塞程序实现

终于用透支生命方法把这一课学完了。感动。以后不这样了。 实现异步非阻塞是一个大命题,这里只原理出发。我会慢慢修改这篇文章。 本文将从异步sleep实现入手,来讲解异步非阻塞程序原理。...什么是异步,同步,阻塞,非阻塞 在写这篇文章前,我对这四个概念是非常模糊。 同步,异步 异步同步差异,在于当线程调用函数时候,线程获取消息方式....线程在同步调用下,也能非阻塞(同步轮非阻塞函数状态),在异步下,也能阻塞(调用一个阻塞函数,然后在函数调用回调,虽然没有什么意义)。 下面,我会慢慢实现一个异步非阻塞sleep。...上面的代码,在一个while环中timer状态。由于timer存在于wait。所以需要把timer“提取”出来。...把timer 生存器gen yield返回出来 2. 轮timer状态(实质是切换进出timer,看它有没有引发StopIteration异常) 3.

7.5K10

linux命令行与shell脚本编程大全和鸟哥私房菜_linux进入命令行

后一行表示同样信息,不过针对系统交换空间。 最后一行显示当前运行进程纤细列表。... : export my_variable. 子shell不能改变父shell全局变量,即使使用export命令。...(修改已有用户密码), chpasswd(文件读取登录名密码对,并更新密码), chage(修改密码过期日期), chfn(修改用户账户备注信息), chsh(修改用户默认登录shell).../bin/bash ## 在while可以使用多个测试命令 var1=10 while echo $var1 ##第一个测试命令 [ $var1 -ge...,until命令要求你制定一个通常返回非零推出状态码测试命令,只有测试命令退出状态码不为0,才会执行循环中列出命令。

2.3K30

Linux Shell函数返回值

笔者认为,之所以return语句没有直接返回,是因为return语句是在管道执行管道其实是另一个子进程,而return只是从子进程返回而已,只是while语句结束了。...而函数体之后语句会继续执行。 同理,全局变量在子进程中进行了修改,但是子进程修改没有办法反应到父进程,全局变量只是作为一个环境变量传入子进程,子进程修改自己环境变量,不会影响到父进程。...因此在写shell函数时候,用到管道(cmd &后台进程也一样)时候一定要清楚此刻是什么地方返回。...因此不存在上面提到由于管道导致返回值失效情况。 在外边只需要获取函数返回值即可。 示例: #!...= 0 result = 0 have yxb, result is 0 这个方式虽然好使,但是有一点一定要注意,不能向标准输出一些不是结果东西,比如调试信息,这些信息可以重定向到一个文件解决,

8.8K20
领券