Shell中的单中括号和双中括号的用法详解


Posted in Servers onDecember 24, 2022

SHELL是UNIX系统的用户与操作系统之间的一种接口。它既是UNIX系统的命令解释程序,又是一种高级的命令程序设计语言。作为命令解释程序,SHELL接收用户输入的命令,将命令翻译成一个动作序列,然后调用系统过程执行这条命令。作为命令程序设计语言,SHELL具有一般高级语言的许多特征,如变量定义、赋值、条件和循环语句等。用户可以利用SHELL的这些功能将多条命令组织成一个命令程序,以完成某种特定的任务。这个命令程序称为SHELL程序或SHELL过程。本文阅读需要有bash和shell编程的基础。

shell中的中括号在条件测试中是使用最频繁的,无论是中括号还是双中括号,可用于一些条件的测试:算术比较、文件属性测试、字符串比较。这篇文章主要介绍了Shell中的单中括号和双中括号的用法详解,需要的朋友可以参考下。

shell中的中括号(也叫方括号,包括单中括号 []和双中括号[[ ]])Shell 里面的中括号(包括单中括号与双中括号)可用于一些条件的测试:

  • 算术比较, 比如一个变量是否为0, [ $var -eq 0 ]
  • 文件属性测试,比如一个文件是否存在,[ -e $var ], 是否是目录,[ -d $var ]
  • 字符串比较, 比如两个字符串是否相同, [[ $var1 = $var2 ]]

[] 常常可以使用 test 命令来代替,后面有介绍。

算术比较

对变量或值进行算术条件判断:

需要注意的是 [ 与 ] 与操作数之间一定要有一个空格,否则会报错。比如下面这样就会报错:

[$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 Does not exit;
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

到此这篇关于Shell中的单中括号和双中括号的用法详解的文章就介绍到这了,更多相关Shell中的中括号内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

Servers 相关文章推荐
Nginx访问日志及错误日志参数说明
Mar 31 Servers
Nginx搭建rtmp直播服务器实现代码
Mar 31 Servers
Nginx如何配置Http、Https、WS、WSS的方法步骤
May 11 Servers
Windows Server 2012 修改远程默认端口3389的方法
Apr 28 Servers
使用 Docker Compose 构建复杂的多容器App
Apr 30 Servers
阿里云国际版 使用Nginx作为HTTPS转发代理服务器
May 11 Servers
Nginx利用Logrotate实现日志分割
May 20 Servers
解决Vmware虚拟机安装centos8报错“Section %Packages Does Not End With %End. Pane Is Dead”
Jun 01 Servers
shell进度条追踪指令执行时间的场景分析
Jun 16 Servers
超越Nginx的Web服务器caddy优雅用法
Jun 21 Servers
Windows server 2003卸载和安装IIS的图文教程
Jul 15 Servers
码云(gitee)通过git自动同步到阿里云服务器
Dec 24 Servers
nginx sticky实现基于cookie负载均衡示例详解
Dec 24 #Servers
解决ubuntu安装软件时,status-code=409报错的问题
Dec 24 #Servers
ubuntu开机后ROS程序自启动问题
Dec 24 #Servers
ubuntu端向日葵键盘输入卡顿问题及解决
Dec 24 #Servers
码云(gitee)通过git自动同步到阿里云服务器
Dec 24 #Servers
Valheim服务器 Mod修改安装教程 【ValheimPlus】
Dec 24 #Servers
keepalived + nginx 实现高可用方案
Dec 24 #Servers
You might like
php的一个登录的类 [推荐]
2007/03/16 PHP
对于PHP 5.4 你必须要知道的
2013/08/07 PHP
php 不使用js实现页面跳转
2014/02/11 PHP
php字符串截取函数用法分析
2014/11/25 PHP
PHP数组游标实现对数组的各种操作详解
2016/01/26 PHP
thinkphp隐藏index.php/home并允许访问其他模块的实现方法
2016/10/13 PHP
PHP回调函数概念与用法实例分析
2017/11/03 PHP
Laravel5.1 框架响应基本用法实例分析
2020/01/04 PHP
Jquery选择器中使用变量实现动态选择例子
2014/07/25 Javascript
JavaScript函数的调用以及参数传递
2015/10/21 Javascript
JS密码生成与强度检测完整实例(附demo源码下载)
2016/04/06 Javascript
Bootstrap每天必学之导航组件
2016/04/25 Javascript
Jquery和BigFileUpload实现大文件上传及进度条显示
2016/06/27 Javascript
深入浅析JavaScript中的Function类型
2016/07/09 Javascript
jQuery组件easyui基本布局实现代码
2016/08/25 Javascript
JavaScript字符串对象
2017/01/14 Javascript
详解mpvue中小程序自定义导航组件开发指南
2019/02/11 Javascript
Postman环境变量全局变量使用方法详解
2020/08/13 Javascript
Python 实现两个服务器之间文件的上传方法
2019/02/13 Python
用python求一个数组的和与平均值的实现方法
2019/06/29 Python
Python字典深浅拷贝与循环方式方法详解
2020/02/09 Python
Python基础之字符串常见操作经典实例详解
2020/02/26 Python
python 元组和列表的区别
2020/12/30 Python
浅析几个CSS3常用功能的写法
2014/06/05 HTML / CSS
CSS3 实现倒计时效果
2020/11/25 HTML / CSS
html5自带表单验证体验优化及提示气泡修改功能
2017/09/12 HTML / CSS
Cotton On南非:澳洲时尚平价品牌
2018/06/28 全球购物
小学教师事迹材料
2014/01/13 职场文书
乡镇党员群众路线教育实践活动对照检查材料思想汇报
2014/10/05 职场文书
派出所副所长四风问题个人整改措施思想汇报
2014/10/13 职场文书
2015关于重阳节的演讲稿
2015/03/20 职场文书
确保工程质量承诺书
2015/04/29 职场文书
教师节作文之小学四年级
2019/09/03 职场文书
MySQL into_Mysql中replace与replace into用法案例详解
2021/09/14 MySQL
SpringBoot2零基础到精通之数据库专项精讲
2022/03/22 Java/Android
webpack介绍使用配置教程详解webpack介绍和使用
2022/06/25 Javascript