跳到主要内容

编写Bash脚本的基础知识

Robert从15岁开始编程,并拥有威斯康星大学的计算机科学学士学位。

本文包含编写脚本的技巧,包括使用方括号、圆括号和大括号。

本文包含编写脚本的技巧,包括使用方括号、圆括号和大括号。

括号、大括号和圆括号在编写bash脚本中扮演着重要的角色,但是由于有这么多不同的组合和用法,可能很难记住在给定的情况下使用哪一种。本文将作为Bash所有外围字符的有用参考。

[单括号]

一组单括号[]被用作test命令的方便快捷方式。所以[1 -eq 1]与测试1 -eq 1相同。如果给定语句为真,Test返回值为0,如果为假,返回值为1。单括号通常用于条件句和循环,如if, while, &&等。

$ [1 -eq 1] &&回声“这将被印刷出来。”这将被打印出来。$ [1 -eq 2] &&回声“这不会被印出来。”

test和单括号支持以下操作符:

人事处 描述

情商

数值平等

lt

不到

gt

大于

= =

字符串平等

! =

字符串不平等

否定

- e

文件存在

- d

检查目录

- f

检查文件

[[双括号]]

双括号[[]]与单括号有相同的用途:它们测试给定的语句,为真返回0,为假返回1。然而,双括号更强大,支持单括号所不支持的功能。

首先,双括号接受数学表达式,而单括号不接受。例子:

$ [[5+5 -eq 10]] &&“这将被印刷出来。”这将被打印出来。$ [5+5 -eq 10] &&“这将显示一个错误。”Bash: [: 5+5:整数表达预期

双括号还支持在比较字符串时使用通配符和正则表达式。==将右侧视为模式(支持通配符),而=~将右侧视为正则表达式。例子:

$ [[applepie == apple*]] &&回声“这将被印刷出来。”这将被打印出来。$ [[cherrypie == apple*]] &&回声“这不会被印出来。”苹果=~ ^a。*e$]] &&回声“这将被印刷出来。”这将被打印出来。苹果=~ ^a。*e$]] &&回声“这不会被印出来。”

{大括号}

单花括号本身用于执行命令列表。列表的返回码与上一个命令的返回码相同。

$ {回声“这是一张名单!”;[1 == 1];}#返回码= 0$ {回声“这也是一份名单!”;[1 == 2];}#返回码= 1

当一个美元符号放在一组单花括号之前时,它表示一个“参数展开”,其中变量被它所包含的值替换。例子:

NUM = 5美元回声$ {NUM}5回声NUM美元5

在开始大括号后放置感叹号将参数展开变为“间接展开”。在间接展开中,将计算花括号内代码中的值,并将输出用作展开变量的名称。例子:

NUM = 5美元$间接= NUM回声$ {!间接}5

“子字符串展开”可以通过向展开中添加起点和长度或结束点来只获得变量的一部分。

$ string = abcdefghijklmnopqrstuvwxyz回声${字符串:0:5}中的回声字符串:$ {5}fghijklmnopqrstuvwxyz回声${字符串:0:5}abcdefghijklmnopqrstu回声${字符串:5:15}fghijklmnopqrst回声${字符串:5:5}fghijklmnopqrstu

这也适用于数组:

$ array=(0 1 2 3 4 5)回声${阵列[@]:2:3}2 3 4

在展开的开头添加#将代替变量的长度,而不是变量的值。

$ string = abcdefghijklmnopqrstuvwxyz回声${#字符串}26

(单括号)

单圆括号本身表示一组类似于单大括号的命令。两者的区别在于括号内的命令在一个单独的“subshell”中执行,并且变量赋值在命令执行后不会保留。

$水果=苹果$(水果=香蕉;回声美元的水果香蕉回声美元的水果苹果

单括号也用于变量赋值来创建数组。

$ array=(0 1 2 3 4 5)

将一美元放在一组括号前面表示“命令替换”。命令替换的工作原理与参数展开非常相似,只是它们接受命令而不是变量名。这通常用于将命令的结果存储在变量中,或将其用作另一个命令的参数。

$ wordcount=$(wc -w essay.txt)回声“essay.txt已经wordcount美元里面有字。”Essay.txt有1000个单词它。回声“essay.txt已经$(wc -w essay.txt)里面有字。”Essay.txt有1000个单词它。

((双括号))

双括号集合用于计算算术表达式。注意,这只适用于整数数学。

$ ((num = 5 + 5))回声num美元10$ ((num =num美元+ 10))回声num美元20.

在算术表达式之前放置美元符号将其转换为“算术展开”,允许将表达式用作命令的一部分。

回声$ ((5+5))10

没有美元符号的算术表达式不能在命令中使用,会导致错误。

回声(5 + 5)Bash:语法错误附近的意外令牌' (

双括号也可以用于for循环。

(i=0;我< 5;i++));回声我美元完成0123.4

有关大括号、方括号和圆括号或Bash的详细信息,请参阅Bash手册

Baidu