一、单小括号()
1、将某个命令的返回值作为某个变量的值进行传递

#!/bin/bash
USER=$(whoami)
echo $USER [root@jump ~]# for i in $(seq 0 4);do echo $i;done
0
1
2
3
4

2、用于初始化数组

array=(1 2 3 4)

二、双小括号(())
1、整数运算(不支持浮点型)

[root@jump ~]# echo $((1+1))
2

2、进制转换

16进制转10进制
[root@jump ~]# echo $((16#5f))
95

3、重新定义变量的值

[root@jump ~]# for ((i=0;i<5;i++));do echo $i;done
0
1
2
3
4

4、算数比较

[root@jump ~]# i=5;if (($i>1));then echo "yes";fi
yes

三、单中括号[...]

算数比较
[root@jump ~]# i=5;if [ $i -ge 1 ];then echo "yes";fi
yes

四、双中括号[[...]]

支持字符串模式匹配,甚至支持正则表达式;使用[[...]]条件判断,能够防止脚本中的许多逻辑错误,比如,&&、||、<和> 操作符能够正常存在于[[ ]]条件判断结构中,但是如果出现在[ ]结构中的话,会报错;
[root@jump ~]# if [[ hello==hell? ]];then echo "yes";fi
yes

五、大括号{...}

1、常规用法

for i in {1..4};do echo $i;done   #打印1到4的数字;
touch {1..4}.txt #创建1.txt 2.txt 3.txt 4.txt文件
touch {1,4}.txt #创建1.txt 4.txt文件

2、变量替换

2.1、${var:-string}和${var:=string}
        如果变量var为空,则将string赋值给${var:-string}和${var:=string};

[root@jump ~]# cat aaa.sh
#!/bin/bash
NUM=$1 if [ ${NUM:="1"} -gt 10 ];then
echo "比10大"
else
echo "比10小"
fi echo "输入值为:"${NUM:-"1"}
[root@jump ~]# bash aaa.sh
比10小
输入值为:1
[root@jump ~]# bash aaa.sh 55
比10大
输入值为:55

2.2、${var:+string}
  变量var不为空的时候,才将string赋值给${var:+string};
2.3、${var:?string}
  变量为空的时候,则把string输出到标准错误中,并从脚本中退出;

[root@jump ~]# cat str.sh
#!/bin/bash
NUM=$1
if [ ${NUM:?"1"} -gt 10 ];then
echo "比10大"
else
echo "比10小"
fi
[root@jump ~]# bash str.sh
str.sh:行3: NUM: 1
[root@jump ~]# bash str.sh 3
比10小

2.4、模式匹配

# 是去掉左边
% 是去掉右边
#和%中的单一符号是最小匹配,两个相同符号是最大匹配。
[root@jump ~]# var="hello word"
[root@jump ~]# echo $var
hello word
[root@jump ~]# echo ${var%o*d}
hello w
[root@jump ~]# echo ${var%%o*d}
hell
[root@jump ~]# echo ${var#?e}
llo word
[root@jump ~]# echo ${var##?e}
llo word
[root@jump ~]# echo ${var##*e}
llo word
[root@jump ~]# echo ${var##*s}
hello word
[root@jump ~]# echo ${var##*d} [root@jump ~]# echo ${var##*r}
d
[root@jump ~]# echo ${var##hello}
word

  以上操作都不会改变variable的值,其中,只有在pattern中使用了*匹配符号时,%和%%,#和##才有区别。结构中的pattern支持通配符,*表示零个或多个任意字符,?表示仅与一个任意字符匹配,[...]表示匹配中括号里面的字符,[!...]表示不匹配中括号里面的字符。

2.5、字符串的提取和替换

[root@jump ~]# var=/data/nginx
[root@jump ~]# echo $var
/data/nginx
[root@jump ~]# echo ${var:5}
/nginx
[root@jump ~]# echo ${var: -5}
nginx
[root@jump ~]# echo ${var: -6}
/nginx
[root@jump ~]# echo ${var:(-6)}
/nginx
[root@jump ~]# echo ${var:1:4}
data
[root@jump ~]# echo ${var/t/a}
/daaa/nginx
[root@jump ~]# echo ${var/a/o}
/dota/nginx
[root@jump ~]# echo ${var//a/o}
/doto/nginx

shell中各种括号的用法的更多相关文章

  1. (转)shell中各种括号的作用()、(())、[]、[[]]、{}

    shell中各种括号的作用().(()).[].[[]].{} 原文:http://www.jb51.net/article/60326.htm http://blog.csdn.net/good_h ...

  2. 有关shell中冒号的特殊用法

    有关shell中冒号的特殊用法,供朋友们参考. : ${VAR:=DEFAULT} 当变量VAR没有声明或者为NULL时,将VAR设置为默认值DEFAULT.如果不在前面加上:命令,那么就会把${VA ...

  3. Shell学习(四)——shell中各种括号的作用

    参考博客: [1]shell中各种括号的作用().(()).[].[[]].{} [2]shell中的单层大/中/小括号.双层大中小括号.命令替换等 一.前言 目录 单括号() 双括号(( )) 单中 ...

  4. shell中的括号(小括号,大括号/花括号)

    在这里我想说的是几种shell里的小括号,大括号结构和有括号的变量,命令的用法,如下: 1.${var} 2.$(cmd) 3.()和{} 4.${var:-string},${var:+string ...

  5. shell脚本学习之Bash shell 里各种括号的用法

    今天在 SegmentFault 上看到又有人问起关于Shell里各种括号的问题.对于很多玩Shell的人,括号是个很尴尬的问题,用起来没问题,说起来不明白,我在这里总结一下Bash Shell几种括 ...

  6. 书写优雅的shell脚本(五)- shell中(())双括号运算符

    在使用shell的逻辑运算符"[]"使用时候,必须保证运算符与算数之间有空格. 四则运算也只能借助:let,expr等命令完成. 今天讲的双括号"(())"结构 ...

  7. shell中字典的一个用法示例

    1. shell中字典的用法示例, 数组用法同字典 2. 以上使用sell配合字典实现的功能, 使用awk能轻松搞定, 如下: awk '{print $2}' file.txt | sort | u ...

  8. Linux Shell中有三种引号的用法

    Linux Shell中有三种引号,分别为双引号(" ").单引号(' ')以及反引号(` `). 其中双引号对字符串中出现的$.''.`和\进行替换:单引号不进行替换,将字符串中 ...

  9. shell中#*,##*,#*,##*,% *,%% *的含义及用法

    介绍下Shell中的${}.##和%%使用范例,本文给出了不同情况下得到的结果.假设定义了一个变量为:代码如下:file=/dir1/dir2/dir3/my.file.txt可以用${ }分别替换得 ...

随机推荐

  1. git提交代码到GitHub操作-简易版(后续完善)

    一.git上传代码到GitHub 1.远程仓库GitHub创建好一个新仓库注意仓库名 2.本地建一个目录写代码,目录名与仓库命名一致 3.在目录下右键 git Bash here 打开git终端命令行 ...

  2. 手动验证 TLS 证书

    证书结构 我们现在使用的 TLS 证书的标准是 X.509,版本号为 V3.版本号可从证书的 Version 字段看到. 根据 RFC 3280 定义的证书结构,证书由三个部分组成: 证书主体(TBS ...

  3. Packed Ciphertexts in LWE-based Homomorphic Encryption:解读

    本节内容记录阅读该论文的笔记 介绍 首先,介绍了两种明文"打包"的方法:PVW和SV PVW:对应论文(PVW:A framework for efficient and comp ...

  4. 面试官问:Go 中的参数传递是值传递还是引用传递?

    一个程序中,变量分为变量名和变量内容,变量内容的存储一般会被分配到堆和栈上.而在 Go 语言中有两种传递变量的方式值传递和引用传递.其中值传递会直接将变量内容附在变量名上传递,而引用传递会将变量内容的 ...

  5. linux篇-linux mysql5.6.27源码安装和错误解决

    centos mysql5.6.27 1编译安装 先进入到文件放置的路径下 创建一个个文件 #mkdir–p /data/mysql/mysql #mkdir–p /data/mysql/mysqld ...

  6. 基于Proxmox平台搭建3D云教室

    背景 本文介绍了在 Proxmox VE 虚拟化平台上使用NVIDIA A16 GPU,开启vGPU特性,利用DoraCloud 搭建3D云教室的方案. Proxmox virtualization ...

  7. 负载均衡之keepalived

    DR实验存在的隐患 DR可能会挂,单点故障 RS可能会挂 解决方案: 解决单点故障 主备:准备多个DR备用机,做好配置,主机挂掉备用机顶上 主主 解决RS会挂的问题 给RS发送请求,如果收到200 o ...

  8. 详解SQL操作的窗口函数

    摘要:窗口函数是聚集函数的延伸,是更高级的SQL语言操作,主要用于AP场景下对数据进行一些分析.汇总.排序的功能. 本文分享自华为云社区<GaussDB(DWS) SQL进阶之SQL操作之窗口函 ...

  9. 软件构造Lab2实验总结

    本次实验训练抽象数据类型(ADT)的设计.规约.测试,并使用面向对象编程(OOP)技术实现ADT.具体来说内容如下: 针对给定的应用问题,从问题描述中识别所需的ADT: 设计ADT规约(pre-con ...

  10. element-ui table组件使用v-if时的问题

    element-ui项目中经常遇到需要使用v-if指令来根据情况动态显示隐藏某些列情况,这时就会出现滚动条样式异常.列错乱.列宽错乱等问题 解决办法:在el-table上添加:key="Ma ...