摘自:https://www.runoob.com/w3cnote/shell-summary-brackets.html
Shell 里面的中括号(包括单中括号与双中括号)可用于一些条件的测试:
- 算术比较, 比如一个变量是否为0,
[ $var -eq 0 ]
。 - 文件属性测试,比如一个文件是否存在,
[ -e $var ]
, 是否是目录,[ -d $var ]
。 - 字符串比较, 比如两个字符串是否相同,
[[ $var1 = $var2 ]]
。
[] 常常可以使用 test 命令来代替,后面有介绍。
算术比较
对变量或值进行算术条件判断:
[ $var -eq 0]# 当 $var 等于 0 时,返回真[ $var -ne 0]# 当 $var 不等于 0 时,返回真
需要注意的是 [ 与 ] 与操作数之间一定要有一个空格,否则会报错。比如下面这样就会报错:
[$var -eq 0]或[ $var -ne 0]
其他比较操作符:
-gt | 大于 |
-lt | 小于 |
-ge | 大于或等于 |
-le | 小于或等于 |
可以通过 -a (and) 或 -o (or) 结合多个条件进行测试:
[ $var1 -ne 0-a $var2 -gt 2]# 使用逻辑与 -a[ $var1 -ne 0-o $var2 -gt 2]# 使用逻辑或 -o
文件系统属性测试
使用不同的条件标志测试不同的文件系统属性。
[ -f $file_var ] |
变量 $file_var 是一个正常的文件路径或文件名 (file),则返回真 |
[ -x $var ] |
变量 $var 包含的文件可执行 (execute),则返回真 |
[ -d $var ] |
变量 $var 包含的文件是目录 (directory),则返回真 |
[ -e $var ] |
变量 $var 包含的文件存在 (exist),则返回真 |
[ -c $var ] |
变量 $var 包含的文件是一个字符设备文件的路径 (character),则返回真 |
[ -b $var ] |
变量 $var 包含的文件是一个块设备文件的路径 (block),则返回真 |
[ -w $var ] |
变量 $var 包含的文件可写(write),则返回真 |
[ -r $var ] |
变量 $var 包含的文件可读 (read),则返回真 |
[ -L $var ] |
变量 $var 包含是一个符号链接 (link),则返回真 |
使用方法如下:
fpath="/etc/passwd"if[-e $fpath ];then echo File exits;else echo Doesnotexit;fi
字符串比较
在进行字符串比较时,最好使用双中括号 [[ ]]. 因为单中括号可能会导致一些错误,因此最好避开它们。
检查两个字符串是否相同:
[[ $str1 = $str2 ]]
当 str1等于str1等于str2 时,返回真。也就是说,str1 和 str2 包含的文本是一样的。其中的单等于号也可以写成双等于号,也就是说,上面的字符串比较等效于 [[ $str1 == $str2 ]]。
注意 = 前后有一个空格,如果忘记加空格, 就变成了赋值语句,而非比较关系了。
字符串的其他比较情况:
[[ $str1 != $str2 ]] |
如果 str1 与 str2 不相同,则返回真 |
[[ -z $str1 ]] |
如果 str1 是空字符串,则返回真 |
[[ -n $str1 ]] |
如果 str1 是非空字符串,则返回真 |
使用逻辑运算符 && 和 || 可以轻松地将多个条件组合起来, 比如:
str1="Not empty" str2=""if[[-n $str1 ]]&&[[-z $str2 ]];then echo str1 is nonempty and str2 is empty string.fi
test 命令也可以从来执行条件检测,用 test 可以避免使用过多的括号,[] 中的测试条件同样可以通过 test 来完成。
if[ $var -eq 0];then echo "True";fi
等价于:
if test $var -eq 0;then echo "True";fi
作者:liuchengxu_
原文:https://blog.csdn.net/simple_the_best/article/details/75915767
相关推荐
- 在圆括号 `()` 的例子中,虽然 `var` 在子Shell中被修改为 `"notest"`,但在父Shell中仍然是 `"test"`。 - 而在花括号 `{}` 的例子中,`var` 的值在当前Shell中被永久修改为 `"notest"`。 另外还有一些关于圆括号...
在Shell中,可以使用大括号`{}`来组合多个命令,使其在同一个Shell环境中依次执行。例如: ```shell { cmd1; cmd2; cmd3; } ``` 这种方式称为命令组,命令组中的命令实际上是在当前Shell环境中执行的。 当命令组...
### Shell脚本括号的用途...以上是对Shell脚本中括号使用的详细介绍,包括了小括号、中括号和大括号的各种应用场景及其特点。这些括号的不同用法使得Shell脚本具有强大的功能和灵活性,可以用来处理各种复杂的任务。
在Shell脚本编程中,括号有着特殊的意义和作用,主要分为五种类型:小括号()、双小括号(())、中括号([])、双中括号([[]])以及大括号({})。下面将详细介绍每一种括号的作用。 1. **小括号()** - 命令组:圆...
* 使用花括号来告诉 shell 我们要打印的是哪个变量: `echo "this is the ${num}nd"` 1.1.4 环境变量 * 环境变量是由 `export` 关键字处理过的变量 * 通常情况下仅仅在登录脚本中使用环境变量 1.1.5 Shell 命令和...
- **变量引用**:在Shell脚本中引用变量时,直接使用变量名即可,但为了避免变量名与普通文本混淆,推荐使用花括号`{}`进行明确界定。 - **示例**:错误的引用方法与正确的引用方法对比: ```bash num=2 echo ...
`readme.txt`文件通常包含有关项目的信息,如作者、许可证、使用方法等。在这个案例中,它可能详细解释了计算器脚本的工作原理,以及如何运行和测试这些脚本。可能还会有一些关于如何修改和扩展脚本的提示,以帮助...
在Shell脚本中,使用export命令可以将变量导出为全局变量,使之在子Shell中也能访问: ```shell export VARIABLE_NAME=value ``` 或者 ```shell declare -x VARIABLE_NAME=value ``` 五、Shell字符串操作 Shell字符...
- **`()`**:用于创建子Shell环境,在括号内的命令会在一个新的子Shell中执行。 - **`{}`**:用于创建一组命令,这些命令在一个单一的Shell环境中执行,不会创建新的子Shell。 #### 八、`$(())`、`$()`与`${}`的...
和[]等在Shell中进行文件名匹配,这对于批量处理文件非常有用。Shell输入与输出章节则介绍了echo、read、cat、管道、tee等命令以及如何使用重定向来控制标准输入输出流。 命令执行顺序章节则涉及了如何使用逻辑...
该章节介绍了如何在Shell脚本中使用“#!”(shebang)来指定解释器,以及如何调用脚本。通过初步练习,让读者熟悉基本操作。 #### 第三章:特殊字符 深入讲解Shell脚本中的特殊字符及其作用,包括但不限于引号、...
cmd2)`**:在子shell中执行命令组。 - **`cmd1|cmd2`**:管道命令,使用`cmd1`的输出作为`cmd2`的输入。 - **`cmd1`cmd2``**:命令替换,使用`cmd2`的输出作为`cmd1`的一个参数。 - **`cmd1&&cmd2`**:逻辑与操作,...
#### 小结 通过以上介绍可以看出,正则表达式在Shell编程中有着广泛的应用,无论是简单还是复杂的文本处理任务,都能通过合理构建正则表达式来高效解决。掌握好正则表达式的基本语法和高级用法,能够极大地提高...
**括号** (`()`) 在Shell中用于定义命令组,即一组命令作为子Shell来运行。 - 示例: ```bash (a=hello; echo $a) ``` 在括号中的命令列表将作为一个子Shell运行,这意味着在括号内的变量只对子Shell有效,对父...
Shell 编程是 UNIX/Linux 操作系统中的一种编程方式,它使用 shell 语言来编写脚本,以实现自动化任务和流程。 环境变量是 shell 编程中一个重要概念。在 bash 中定义环境变量的标准方法是使用等号 (=) 将变量名和...