shell中各种括号的用法
一、单小括号()
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中各种括号的用法的更多相关文章
- (转)shell中各种括号的作用()、(())、[]、[[]]、{}
shell中各种括号的作用().(()).[].[[]].{} 原文:http://www.jb51.net/article/60326.htm http://blog.csdn.net/good_h ...
- 有关shell中冒号的特殊用法
有关shell中冒号的特殊用法,供朋友们参考. : ${VAR:=DEFAULT} 当变量VAR没有声明或者为NULL时,将VAR设置为默认值DEFAULT.如果不在前面加上:命令,那么就会把${VA ...
- Shell学习(四)——shell中各种括号的作用
参考博客: [1]shell中各种括号的作用().(()).[].[[]].{} [2]shell中的单层大/中/小括号.双层大中小括号.命令替换等 一.前言 目录 单括号() 双括号(( )) 单中 ...
- shell中的括号(小括号,大括号/花括号)
在这里我想说的是几种shell里的小括号,大括号结构和有括号的变量,命令的用法,如下: 1.${var} 2.$(cmd) 3.()和{} 4.${var:-string},${var:+string ...
- shell脚本学习之Bash shell 里各种括号的用法
今天在 SegmentFault 上看到又有人问起关于Shell里各种括号的问题.对于很多玩Shell的人,括号是个很尴尬的问题,用起来没问题,说起来不明白,我在这里总结一下Bash Shell几种括 ...
- 书写优雅的shell脚本(五)- shell中(())双括号运算符
在使用shell的逻辑运算符"[]"使用时候,必须保证运算符与算数之间有空格. 四则运算也只能借助:let,expr等命令完成. 今天讲的双括号"(())"结构 ...
- shell中字典的一个用法示例
1. shell中字典的用法示例, 数组用法同字典 2. 以上使用sell配合字典实现的功能, 使用awk能轻松搞定, 如下: awk '{print $2}' file.txt | sort | u ...
- Linux Shell中有三种引号的用法
Linux Shell中有三种引号,分别为双引号(" ").单引号(' ')以及反引号(` `). 其中双引号对字符串中出现的$.''.`和\进行替换:单引号不进行替换,将字符串中 ...
- shell中#*,##*,#*,##*,% *,%% *的含义及用法
介绍下Shell中的${}.##和%%使用范例,本文给出了不同情况下得到的结果.假设定义了一个变量为:代码如下:file=/dir1/dir2/dir3/my.file.txt可以用${ }分别替换得 ...
随机推荐
- 同一个目标ip在windows下使用tracert正常但是在linux下使用traceroute中间节点不显示?tracert与traceroute原理与抓包分析
针对第一个问题先说结论 windows的tracert是使用icmp来探路,linux的traceroute是使用udp探测,如果想达到和windows下一个效果,建议使用-I参数或mtr 下面是原理 ...
- git 本地项目关联新repo
git initgit remote add origin repo-url git pull origin master --allow-unrelated-histories git add . ...
- Spring-Batch处理MySQL数据后存到CSV文件
1 介绍 用Spring Batch实现了个简单的需求,从MySQL中读取用户表数据,根据生日计算年龄,将结果输出到csv文件. 1.1 准备表及数据 user test; DROP TABLE IF ...
- JavaScript数组操作常用方法
@ 目录 数组基础遍历方法. for for of for in 数组的基础操作方法. push:尾部追加元素 pop:尾部移出元素 unshift:头部追加元素 shift:头部移出元素 splic ...
- Flask_WTF实现表单
Flask_WTF实现表单可分为六个步骤: ①导入FlaskForm扩展包(from flask_wtf import FlaskForm) ②导入StringField,PasswordField, ...
- dubbo是如何实现可扩展的?(二)
牛逼的框架,看似复杂难懂,思路其实很清晰.---me 上篇文章,在整体扩展思路上进行了源码分析,比较粗糙,现在就某些点再详细梳理下. dubbo SPi的扩展,基于一类.三注解. 一类是Extensi ...
- WPF|快速添加新手引导功能(支持MVVM)
阅读导航 前言 案例一 案例二 案例三(本文介绍的方式) 如何使用? 控件如何开发的? 总结 1. 前言 案例一 站长分享过 眾尋 大佬的一篇 WPF 简易新手引导 一文,新手引导的效果挺不错的,如下 ...
- liunx 服务器下面安装mysql8.0
闲来无事,准备自己搭建一个服务器高点事情,不可避免的就是需要使用到mysql数据库了.在Linux系统安装MySQL8.0,网上已经有很多的教程了,到自己安装的时候却发现各种各样的问题,现在把安装过程 ...
- ExtJS配置TabPanel的鼠标右键菜单(ContextMenu)功能
更新记录 2022年6月14日 发布. 2022年6月13日 初稿. TabPanel的鼠标右键菜单(ContextMenu)功能介绍 开源的TabPanel组件很少做到拖拽调整tab顺序功能的,支持 ...
- 彰显个性│制作一个独一无二的动态 svg 头像
一.头像预览 看一下博主的动态图像,是不是很炫酷,想不想拥有一个? 这是一个 svg 图片,svg 图片不仅可以通过制图软件制作外,其实也可以通过代码进行开发 因为 svg 本质上是一个下 xml 文 ...