【shell】各种括号()、(())、[]、[[]]、{}的使用
圆括号
1.单圆括号()
①命令组,括号中的命令将会开启一个子shell独立运行;括号中以分号连接,最后一个命令不需要;各命令和括号无需空格
Linux:/qins # (var=1;echo $var)
1
②命令替换,等同于`cmd`,shell将会执行$(cmd)中的命令,将其输出放到原来的命令中
Linux:/qins # echo $(date +%Y-%m-%d)
2019-01-17
③定义数组
Linux:/qins # a=(1 2 3)
2.双圆括号(())
①整数扩展。这种运算支持整数型的,但不支持浮点型的
Linux:/qins # echo $((2.1+3))
-bash: 2.1+3: syntax error: invalid arithmetic operator (error token is ".1+3")
Linux:/qins # echo $((2+3))
5
②跨进制运算
进制转换例子:十六进制2AF5(10~15依次对应了A、B、C、D、E、F)
用竖式计算: 2AF5换算成10进制:
第0位: 5 * 16^0 = 5
第1位: F * 16^1 = 240
第2位: A * 16^2 = 2560
第3位: 2 * 16^3 = 8192 +
-------------------------------------
10997
直接计算就是:
5 * 16^0 + F * 16^1 + A * 16^2 + 2 * 16^3 = 10997
Linux:/qins # echo $((16#2af5))
10997
说明:16#2af5表示16进制的2af5
③重定义变量值
Linux:/qins # a=5;((a--));echo $a
4
④用于算术用运算比较
Linux:/qins # for((i=1;i<=5;i++));
> do
> echo $i
> done
1
2
3
4
5
3.中括号[]
①bash的内部命令,[和test是等同的。进行字符串比较,使用==与!=,整数比较使用-gt,-eq这种形式,[]中的逻辑与和逻辑或使用-a与-o表示
括号两边都有空格,字符与等号==之间需要空格
②引用数组中每个元素的编号
Linux:/qins # a=(1 2 3)
Linux:/qins # echo ${a[0]}
1
4.双中括号[[]]
if
[ $a -
ne
1] && [ $a != 2 ]
可以写成
if
[[ $a != 1 && $a != 2 ]]
双括号比[]更通用
5.大括号
①表达变量的值
Linux:/qins # a=2
Linux:/qins # echo $ab
Linux:/qins # echo ${a}b
2b
当表达式的值存在歧义的时候需要加上{}以便区分;
②批量操作
Linux:/qinys/oliver # touch {a,b,c,d}.dat
Linux:/qinys/oliver # ls
a.dat b.dat c.dat d.dat
批量创建了文件
③扩展顺序
Linux:/qinys/oliver # touch {1..5}file.dat
Linux:/qinys/oliver # ls -lrt
total 0
-rw-r--r-- 1 root root 0 Jan 17 21:01 5file.dat
-rw-r--r-- 1 root root 0 Jan 17 21:01 4file.dat
-rw-r--r-- 1 root root 0 Jan 17 21:01 3file.dat
-rw-r--r-- 1 root root 0 Jan 17 21:01 2file.dat
-rw-r--r-- 1 root root 0 Jan 17 21:01 1file.dat
按顺序批量创建了文件
④特殊替换:${var:-string},${var:+string},${var:=string},${var:?string}
说明:unset a表示将a被赋予的值清空
${var:-string},当var为空,则替换为空,var非空,则使用原值
Linux:/qinys/oliver # a=3
Linux:/qinys/oliver # echo ${a:-23}
3
Linux:/qinys/oliver # unset a
Linux:/qinys/oliver # echo ${a:-23}
23
${var:+string}与${var:-string}刚好相反
Linux:/qinys/oliver # a=3
Linux:/qinys/oliver # echo ${a:+23}
23
Linux:/qinys/oliver # unset a
Linux:/qinys/oliver # echo ${a:+23}
${var:=string}与${var:-string}功能类似,唯一不同的是,当var为空的时候,是将string赋予var
Linux:/qinys/oliver # a=3
Linux:/qinys/oliver # echo ${a:=23}
3
Linux:/qinys/oliver # unset a
Linux:/qinys/oliver # echo ${a:=23}
23
${var:?string}与${var:-string}功能类似,唯一不同的是,当var为空的时候,将错误输出并退出
Linux:/qinys/oliver # a=10
Linux:/qinys/oliver # echo ${a:?99}
10
Linux:/qinys/oliver # unset a
Linux:/qinys/oliver # echo ${a:?99}
-bash: a: 99
⑤多命令执行
前后必须有空格,并且每个命令结束都有分号
【shell】各种括号()、(())、[]、[[]]、{}的使用的更多相关文章
- [转帖]详解shell脚本括号区别--$()、$「 」、$「 」 、$(()) 、「 」 、「[ 」]
详解shell脚本括号区别--$().$「 」.$「 」 .$(()) .「 」 .「[ 」] 原创 波波说运维 2019-07-31 00:01:00 https://www.toutiao.com ...
- linux shell “(())” 双括号运算符使用
导读 在刚开始学习inux shell脚本编程时候,对于它的 四则运算以及逻辑运算.估计很多朋友都感觉比较难以接受.特变逻辑运算符"[]"使用时候,必须保证运算符与算数 之间有空格 ...
- linux shell (()) 双括号运算符使用
估计很多朋友都感觉比较难以接受.特变逻辑运算符"[]"使用时候,必须保证运算符与算数 之间有空格. 四则运算也只能借助:let,expr等命令完成. 今天讲的双括号"(( ...
- Shell—各种括号的用法
括号的种类 小括号,圆括号 ( ) 中括号,方括号 [ ] 大括号.花括号 { } 一.单小括号 () 1.另开命令组——小括号中的命令将会新开启一个子shell独立顺序运行,所以括号中的变量不能够被 ...
- 详解shell脚本括号区别--$()、$「 」、$「 」 、$(()) 、「 」 、「[ 」]
概述 很多时候我们在写shell脚本的时候总会碰到不同的括号,那么这些不同的括号有什么区别呢? $() 用于命令交换 说明:平时脚本用的``符号也是用于命令交换的哦,和$() 的操作是一样的 ${ } ...
- shell 中小括号,中括号,大括号的区别
一.小括号,圆括号() 1.单小括号 () ①命令组.括号中的命令将会新开一个子shell顺序执行,所以括号中的变量不能够被脚本余下的部分使用.括号中多个命令之间用分号隔开,最后一个命令可以没有分号, ...
- Shell 双括号概述
1. 比较两个数的大小 #!/bin/bash ## 定义变量 a= b= ## 方法1,一个方括号,需要转义 if [ $a \> $b ];then echo "方法1:yes&q ...
- Linux shell运算符
双引号 --使用双引号可以引用除了字符$,`(单反号),\(反斜杠)外的任意字符或者字符串 --echo "参数的个数是$#" 单引号 --单引号与双引号类似,不同的是shell会 ...
- Shell编程基础教程2--变量和运算符
2.变量和运算符 2.1.变量的类型 本地变量:环境变量:变量替换(显示变量):位置变量:标准变量:特殊变量: 2.2.本地变量 本地变量在用户现在的shell生命周期的脚本中使用 在命令行, LOC ...
- linux第4天 shell socket
$[ ] 表示形式告诉shell对方括号中的表达式求值 echo $[3+9] 赋值运算符 =,+=,-=,*=,/=,%=,&=,^=.|=,<<=,>>= let ...
随机推荐
- 直方图与bin
1.bin的含义 直方图中bin的含义:计算颜色直方图需要将颜色空间划分为若干小的颜色区间,即直方图的bin,通过计算颜色在每个小区间内德像素得到颜色直方图,bin越多,直方图对颜色的分辨率越强,但增 ...
- User guide for Netty 4.x
Table of Contents Preface The Solution Getting Started Before Getting Started Writing a Discard Serv ...
- 28个HTML5特征、窍门和技术
原文地址: http://www.zhangxinxu.com/wordpress/2010/08/%E7%BF%BB%E8%AF%91-%E4%BD%A0%E5%BF%85%E9%A1%BB%E7 ...
- spring mvc 接受前台json @RequestBody json 属性 空 使用 JsonProperty spring mvc 获取json转乘bean
请给json序列序列化成的javabean 属性加上 @JsonProperty(value = "real_name") 否则 springmvc 可能接受不到数据 ja ...
- lazarus汉化
启动Lazarus IDE,点击菜单栏中的Environment,再点击Options选项 在弹出的IDE选项框内,点选左侧Environment下的Desktop子选项,将Language设为Chi ...
- 第四章 logstash - type与tags属性
参考:http://kibana.logstash.es/content/logstash/plugins/input/stdin.html 最常用法: input { stdin { tags =& ...
- 正向代理与反向代理区别图解 (nginx)
1. 背景 经常听到代理,比如通常我们要上国外的网站时,需要买vpn作为跳板机器进行访问. 但是在公司里面也听到了nginx支持反向代理. 那什么是正向代理,什么是反向代理?在网上看了写内容,说一下自 ...
- Octave环境的安装
Octave是一种解释类的编程语言,并且是GNU项目下的开源软件,与之相对是大家都非常熟悉的matlab,Octave和matlab语法基本上一致,都是用来快速做一些强大的矩阵运算来使用的,最大的不同 ...
- IT痴汉的工作现状42-Android越用越慢?立场不同,谈何信任!
大海和我一次闲聊中问,你做安卓这么久.能给我解释一下为什么安卓手机用半年后就变慢吗? 呃... 伟仔还真是头一次听说这么精准的半年就慢的说法. 大海继续说."能不能是厂家有益设置的?哦,也不 ...
- POJ 3525 Most Distant Point from the Sea 二分+半平面交
题目就是求多变形内部一点. 使得到任意边距离中的最小值最大. 那么我们想一下,可以发现其实求是看一个圆是否能放进这个多边形中. 那么我们就二分这个半径r,然后将多边形的每条边都往内退r距离. 求半平面 ...