Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >专栏 >bash 的条件和循环

bash 的条件和循环

作者头像
IMWeb前端团队
发布于 2018-01-08 09:11:19
发布于 2018-01-08 09:11:19
1.3K00
代码可运行
举报
文章被收录于专栏:IMWeb前端团队IMWeb前端团队
运行总次数:0
代码可运行

本文作者:IMWeb 江源 原文出处:IMWeb社区 未经同意,禁止转载

原文

条件语句和循环可以统称为流程控制,是一门语言最基础的部分。

bash 的流程控制和大家熟悉的语言非常类似,所以这块上手应该很快。

条件语句

条件这块建议先去瞧瞧《bash 的 Test》。bash 中的条件语句,基础就是 Test

if

先来个实例:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
x=5;

if [ $x = 5 ]; then
    echo 'x equals 5.';
else
    echo 'x does not equal 5';
fi

# 输出: x equals 5.

和我们熟悉的语言非常相似,不妨抽象一下:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
if commands; then
    commands
[elif commands; then
    commands...]
[else
    commands]
fi

这就是 if 的基本语法,其中紧接在 ifelif 后面的 commands 多数时候为 Test

来个复杂一点的例子:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
FILE=~/.zshrc # 随便找个路径
if [ -e "$FILE" ]; then # -e 单目操作符
    if [ -f "$FILE" ]; then
        echo "$FILE is a regular file."
    fi
    if [ -d "$FILE" ]; then
        echo "$FILE is a directory."
    fi
    if [ -r "$FILE" ]; then
        echo "$FILE is readable."
    fi
    if [ -w "$FILE" ]; then
        echo "$FILE is writable."
    fi
    if [ -x "$FILE" ]; then
        echo "$FILE is executable/searchable."
    fi
else
    echo "$FILE does not exist"
fi

这个例子中就有大量的 Test

case

case 其实就是我们熟悉的那个 swich ,但语法形式上有很大的不同。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
case "$variable" in
    "$condition1" )
        command...
    ;;
    "$condition2" )
        command...
    ;;
esac
  • 双引号包裹变量,这不是必须的
  • 每一个 Test 语句,必须以 ) 结尾
  • 每一个条件区块,必须以 ;; 结尾
  • 整个 case 区块,必须以 esac 结尾——esac case spelled backwards

来个例子。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
x=4

case $x in
    'a' )
        echo "x 是 a";;
    4 )
        echo "x 是 4";;
    'b' )
        echo "x 是 b"
esac

# x 是 4

总得来说, bash 中的条件语句, Test 是核心,ifcase 熟悉语法即可。

循环

bash 中有 forwhile 两种常见的循环体,我们应该都很熟悉。

for

直接上实例,批量修改文件名。

目录如下:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
.
├── error_400.html
├── error_403.html
├── error_404.html
├── error_500.html
└── error_503.html

bash 代码:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
for $i in `ls`
do
    mv $i ${i/html/ejs};
done

语法其实很明朗:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
for variable [in words]; do
    commands
done
  • do 可以另起一行,如果和 for 同行,那么 for 语句必须 ; 结尾
  • 循环体必须 done 结尾
  • [in words] 取值很宽泛,可以是通配符,可以是一个命令(ls),一句话,必须是数组形式
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
for i in *
do
    echo $i;
done

## 会打印当前目录下的所有文件名

while

看个例子:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
count=1
while [ $count -le 5 ]; do
    echo $count
    count=$((count + 1))
done
echo "Finished."

# 依次打印 1 - 5 和 finished

语法如下:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
while commands; do commands; done

参考文章

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
21.shell语言之if条件判断语句
then后面跟符合条件之后执行的程序,可以放在[]之后,用;分隔。也可以换行写入,
全栈程序员站长
2022/09/14
7030
小萌新—> Linux高手系列:包管理【二】
作为一个有追求的测试,如何从一个运维小萌新成长为一个Linux 高手?请持续关注我们的
TestOps
2022/04/07
3670
小萌新—> Linux高手系列:包管理【二】
Shell条件语句
Shell是一种常用的命令行解释器,用于处理Linux和Unix操作系统中的命令。Shell脚本是一种编程语言,允许用户创建自动化脚本,以执行一系列指令。条件语句是Shell脚本中的重要组成部分,允许用户在执行脚本时根据特定条件执行不同的命令。本文将详细介绍Shell条件语句,包括语法、示例和最佳实践。
玖叁叁
2023/04/09
8350
shell 循环语句[通俗易懂]
发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/163943.html原文链接:https://javaforall.cn
全栈程序员站长
2022/09/15
4940
第三十二章 : 流程控制:case 分支
In this chapter, we will continue to look at flow control. In Chapter 28, we constructedsome simple menus and built the logic used to act on a user’s selection. To do this, weused a series of if commands to identify which of the possible choices has been selected.This type of construct appears frequently in programs, so much so that many programminglanguages (including the shell) provide a flow control mechanism for multiple-choice decisions.
砖业洋__
2023/05/06
1530
Bash 手册 v3.2 - 3
3.2 Shell命令 =============     一个简单命令如echo a b c由命令自身和后面的变元组成, 并以空格分隔.     复杂命令是由简单命令用以下方式组合而成: 管道线(使前面命令的输出变成后面 命令的输入), 循环或条件结构, 或者其他组合形式. 3.2.1 简单命令 --------------     简单命令是最常见的命令. 一个简单命令就是一串以控制操作符结尾并用空白符 (*参见 2 定义::)分隔的单词. 通常第一个单词指定了要执行的命令, 剩余的单词 都是该命令的变元.     一个简单命令的返回状态就是POSIX 1003.1 waitpid函数提供的退出状态. 如果 命令被信号n终结, 则其返回状态是128+n. 3.2.2 管道线 ------------     一个管道线就是由'|'分隔的一串简单命令.     管道线的形式是:         [time [-p]] [!] command1 [| command2 ... ] 管道线中每个命令的输出通过管道连接到下一个命令的输入, 就是说, 每个命令读取 了前一个命令的输出.     使用保留字time会在管道线执行结束时打印出其计时数据. 目前计时数据包含该 管道线执行所消耗的总逝去时间, 用户态时间和系统态时间. 选项'-p'把时间输出 格式调整为POSIX所指定的格式. 可以设置TIMEFORMAT变量来指定如何显示时间信息. 关于有哪些可用的格式, *参见 5.2 Bash变量. 将time作为保留字使用使得对shell 内部命令, shell函数, 及管道线的时间测量成为可能. 这一点如果用外部time命令 则不容易做到.     如果管道线不是异步地执行(*参见 3.2.3 命令列表::), 则shell会等待管道线 中所有命令运行结束.     管道线中的每个命令都在各自的子shell中运行(*参见 3.7.3 命令执行环境). 如果pipefail选项被关闭(*参见 4.3 Set内部命令), 管道线的退出状态就是管道线 中最后一个结束命令的退出状态. 如果pipefail选项开启, 管道线的退出状态是最后 (最右)一个拥有非零退出状态的命令的退出状态, 或是0如果所有命令都成功退出. 若 管道线前面出现保留字'!', 则退出状态是上述所描述情况的逻辑反. Shell等到管道 线内所有命令结束才返回值. 3.2.3 命令列表 --------------     列表是指一个或多个管道线组成的序列, 它们以';', '&', '&&' 或'||'分隔, 并可选地以';', '&', 或newline结束.     在这些列表操作符中, '&&'和'||'具有相同的优先级, ';'和'&'具有相同的优先 级, 且'&&'和'||'的优先级比';'和'&'要高.     在列表中, 也可用一个或多个newline组成的序列来分隔命令, 这点上和';'等价.     当一个命令以控制操作符'&'结尾时, shell将该命令放入一个子shell中异步地 执行. 这也被称为将命令放在后台执行. Shell不会等该命令结束, 而是立即以返回 状态0(真)返回. 在shell的任务控制功能没有启用(*参见 7 任务控制), 而且又没有 任何显式的重定向的时候, 此异步命令的输入将会从/dev/null重定向而得.     用';'分隔的命令顺序地执行; shell依次等待每个命令执行完毕. 最后的返回 状态由最后一个命令的退出状态决定.     控制操作符'&&'和'||'分别表示列表的'与'和'或'. 列表与的形式是:         command1 && command2 当且仅当command1的退出状态为零时command2才被执行.     列表或的形式为:         command1 || command2 当且仅当command1的退出状态非零时command2才被执行.     列表与和列表或的返回状态由列表中最后一个执行的命令的退出状态决定. 3.2.4 复合命令 --------------     符号命令是shell编程特性的一个构造. 每个构造以一个保留字或控制操作符开始, 以一个对应的保留字或控制操作符结束. 在没有显式覆盖时, 任何针对复合命令的重 定向都对该复合命令内的所有命令起作用.     Bash提供循环结构, 条件结构, 以及将命令组合起来作为一个基本单元的机制. 3.2.4.1 循环结构 ................     Bash支持以下循环结构.     注意在以下命令语法描述中, 任何';'出现的地方都可以用一个或多个newline替代. 'until
py3study
2020/01/14
1.5K0
shell脚本编程之路3
描述:我们学过的每一种高级编程语言,都在存在流程/分支选择/循环等结构,同样shell编程中也有这是与windows上的bat编程不一样的点;shell选择分支嵌套建议不超过三层,为了执行的效率和其他人容易读懂;
全栈工程师修炼指南
2022/09/28
4640
shell脚本编程之路3
Linux Bash基础(二)
类比C语言中的if else-if else结构,注意结尾是fi,即if反过来写。
xxpcb
2020/08/04
2.6K0
linux22-条件语句
shell 中的if 与其他编程语言有所不同。它默认下的if 后的对象为一个命令(command),而非通常的条件(condition)。
北野茶缸子
2022/07/07
1.3K0
linux22-条件语句
Linux云计算运维之Shell
printf ‘输出类型输出格式’ 输出内容 输出类型 : %ns :输出字符串。n是数字指代输出几个字符 %ni :输出整数。n是数字指代输出几个数字 %m.nf : 输出浮点数。m和n是数字,指代输出的整数位数和小数位数。如%8.2f 代表共输出8位数,其中2位是小数,6位是整数。 输出格式 : \a : 输出警告声音 \b : 输出退格键,也就是Backspace键 \f : 清楚屏幕 \n : 换行
海仔
2020/06/08
5.7K0
Linux Bash Shell入门教程
BASH 的基本语法 最简单的例子 —— Hello World! 关于输入、输出和错误输出 BASH 中对变量的规定(与 C 语言的异同) BASH 中的基本流程控制语法 函数的使用 2.1     最简单的例子 —— Hello World! 几乎所有的讲解编程的书给读者的第一个例子都是 Hello World 程序,那么我们今天也就从这个例子出发,来逐步了解 BASH。 用 vi 编辑器编辑一个 hello 文件如下: #!/bin/bash  # This is a
joshua317
2018/04/10
2.8K0
Shell编程:流程控制与高级应用的深入解析
使用Shell编程时,流程控制是非常重要的,它允许你根据条件执行不同的命令或者控制程序的执行流程。Shell支持一些基本的流程控制结构,包括条件语句和循环语句。
久绊A
2023/12/19
2020
Bash速查表
例 #!/usr/bin/env bash NAME="John" echo "Hello $NAME!" 变量 NAME="John" echo $NAME echo "$NAME" echo "${NAME}!" 字符串引号 NAME="John" echo "Hi $NAME" #=> Hi John echo 'Hi $NAME' #=> Hi $NAME 条件执行 git commit && git push git commit || echo "Commit failed" 功能 get
步履不停凡
2019/08/23
7640
shell programming tutorial
可以直接 man bash 学习语法和相关命令。 一、什么是shell程序 以文件形式存放批量的Linux命令集合,该文件能够被Shell解释执行,这种文件就是Shell脚本程序 通常由一段Linux
s1mba
2018/01/03
1.4K0
shell programming tutorial
第三十章 : 流程控制:while/until 循环
In the previous chapter, we developed a menu-driven program to produce various kindsof system information. The program works, but it still has a significant usabilityproblem. It only executes a single choice and then terminates. Even worse, if an invalidselection is made, the program terminates with an error, without giving the user anopportunity to try again. It would be better if we could somehow construct the programso that it could repeat the menu display and selection over and over, until the userchooses to exit the program.
砖业洋__
2023/05/06
3750
Bash 脚本进阶,经典用法及其案例
在linux中,Bash 脚本是很基础的知识,大家可能一听bash脚本感觉很高大上,像小编当初刚开始学一样,感觉会写脚本的都是大牛。虽然复杂的bash脚本是很烧脑,但是,当我们熟练的掌握了其中的用法与技巧,再多加练习,总有一天也会成为得心应手的bash脚本大牛。
民工哥
2021/02/23
5680
Bash 脚本进阶,经典用法及其案例
Bash 编程易错总结大全
Bash Pitfalls[1] 文章介绍了 40 多条日常 Bash 编程中,老手和新手都容易忽略的错误编程习惯。每条作者在给出错误的范例上,详细分析与解释错误的原因,同时给出正确的改写建议。文中有不少引用的文章,也值得大家仔细阅读。仔细阅读了这篇文章后,收获很多,不感独享,把这篇文章以半翻译半笔记的形式分享给大家。
码农架构
2022/11/17
2.9K0
Bash 编程易错总结大全
《Linux命令行与shell脚本编程大全》第十二章 使用结构化命令
许多程序要就对shell脚本中的命令施加一些逻辑控制流程。 结构化命令允许你改变程序执行的顺序。不一定是依次进行的 12.1 使用if-then语句 如下格式: if command then          commands fi if语句会允许if后面的那个命令,如果该命令的退出码的0(代表成功了)位于then部分的命令就会被执行。否则不执行。 例子: #!/bin/bash # if then test if pwd  then echo “pwd success” fi # thi
xcywt
2018/01/11
9440
02 . Shell变量和逻辑判断及循环使用
while循环用于不断执行一系列命令,也用于从输入文件中读取数据;命令通常为测试条件。其格式为:
iginkgo18
2020/09/27
1.5K0
SHELL(bash)脚本编程二:语法
token 是指被shell看成一个单一单元的字符序列 bash中包含三种基本的token:保留关键字,操作符,单词。 保留关键字是指在shell中有明确含义的词语,通常用来表达程序控制结构。包括:
用户5030870
2019/04/11
1.4K0
相关推荐
21.shell语言之if条件判断语句
更多 >
领券
社区富文本编辑器全新改版!诚邀体验~
全新交互,全新视觉,新增快捷键、悬浮工具栏、高亮块等功能并同时优化现有功能,全面提升创作效率和体验
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文