博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
shell之()、{}
阅读量:6216 次
发布时间:2019-06-21

本文共 2854 字,大约阅读时间需要 9 分钟。

1 一串命令的执行

[root@localhost log]# (a=2;echo $a)

2

[root@localhost log]# { a=2;echo $a;}    #注意格式的不同,左边有空格,最右边以分号结尾

2

显示字符串长度

[root@localhost ~]# a=abcdefg

[root@localhost ~]# echo ${#a}

7

2 ()和{}中括号里面的某个命令的重定向只影响该命令,但括号外的重定向则影响到括号里的所有命令

[root@localhost log]# { a=10;b=100;echo $a>c;echo $b;}

100

[root@localhost log]# cat c

10

[root@localhost ~]# { a=10;b=100;echo $a;echo $b;}>c

[root@localhost ~]# cat c

10

100

()只是对一串命令重新开一个子shell进行执行,{}对一串命令在当前shell执行

[root@localhost ~]# a=100

[root@localhost ~]# (a=10;echo $a)

10

[root@localhost ~]# echo $a    #值没有被修改,说明()中命令在子shell中实现 

100


[root@localhost ~]# a=100

[root@localhost ~]# { a=10;echo $a;}

10

[root@localhost ~]# echo $a    #值已经被修改,说明{}中命令在当前shell中实现

10

4 $()和${}

命令替换:

[root@localhost ~]# echo $(ls)

anaconda-ks.cfg a.py a.sh c install.log install.log.syslog moban.sh secure test.txt

变量的实现:

[root@localhost ~]# a=1000

[root@localhost ~]# echo ${a}

1000

5 几种特殊的替换结构

${var:-string},${var:+string},${var:=string},${var:?string}

1)若变量var为空或者未定义,则用在命令行中用string来替换${var:-string},否则变量var不为空时,则用变量var的值来替换${var:-string}

[root@localhost ~]# echo $var

[root@localhost ~]# echo ${var:-bcc}

bcc

[root@localhost ~]# var=1000

[root@localhost ~]# echo ${var:-bcc}

1000

2)对于${var:=string}的替换规则和${var:-string}是一样的,所不同之处是${var:=string}若var为空时,用string替换${var:=string}的同时,把string赋给变量var:

[root@localhost ~]# echo $var

[root@localhost ~]# echo ${var:=bbc}

bbc

[root@localhost ~]# echo $var

bbc


3)${var:+string}:只有当var不是空的时候才替换成string,若var为空时则不替换或者说是替换成变量var的值,即空值

[root@localhost ~]# var=100

[root@localhost ~]# echo $var

100

[root@localhost ~]# echo ${var:+bbc}

bbc

[root@localhost ~]# echo $var

100

[root@localhost ~]# unset var

[root@localhost ~]# echo $var

[root@localhost ~]# echo ${var:+bbc}

4)${var:?string}:若变量var不为空,则用变量var的值来替换${var:?string},若变量var为空,则把string输出到标准错误中,并从脚本中退出。可利用此特性来检查是否设置了变量的值

[root@localhost ~]# echo $var

[root@localhost ~]# echo ${var:?bbc}

-bash: var: bbc

[root@localhost ~]# var=100

[root@localhost ~]# echo ${var:?bbc}

100

6 匹配和替换:

*    通配符,任意数目的任意字符

#    去掉左边

%    去掉右边

单一符号是最小匹配;两个符号是最大匹配

示例:

[root@localhost ~]# var=/var/log/messages       

[root@localhost ~]# echo ${var:3:2}    #取出从第3个字符开始,向后2个字符

r/

[root@localhost ~]# echo ${var:0:3}    #取出前3个字符

/va

[root@test ~]# echo ${var:5}    #取出第5个字符后面所有字符

log/messages

[root@localhost ~]# var=/var/log/messages

[root@localhost ~]# echo ${var/log/LOG}    #把log替换成LOG

/var/LOG/messages

[root@localhost ~]# echo ${var//s/$}    #两个符号是最大匹配,全部替换

/var/log/me$$age$

[root@localhost ~]# var=/var/log/messages

[root@localhost ~]# echo ${var#*/}    #从左边开始,删除第一个匹配*/及其左边的字符

var/log/messages                             

[root@localhost ~]# echo ${var#*m}

essages

[root@localhost ~]# echo ${var##*/}    #从左边开始,删除最后一个匹配*/及其左边的字符

messages                                           

[root@localhost ~]# echo ${var%/*}    #从右边开始,删除第一个匹配/*及其右边的字符

/var/log                                           

[root@localhost ~]# echo ${var: -5}    #打印最后5个字符

sages

本文转自 zengwj1949 51CTO博客,原文链接:http://blog.51cto.com/zengwj1949/1922976

转载地址:http://tlpja.baihongyu.com/

你可能感兴趣的文章
浅谈 SOLID 原则的具体使用
查看>>
oracle等待事件以及解决方案
查看>>
【IOS】ios中NSUserDefault与android中的SharedPreference用法简单对比
查看>>
perl adbldxml.pl报错BEGIN failed--compilation aborted at adbldxml.pl line 32
查看>>
MapGuide Tips----如何在MapGuide Fusion Viewer里设置搜索选中地物时的Scale?
查看>>
do_exit【转】
查看>>
Java生成某段时间内的随机时间
查看>>
GNU make manual 翻译(十三)
查看>>
Android -- onMeasure
查看>>
ElasticSearch vs Solr多维度分析对比
查看>>
Metasploit的三种启动方式
查看>>
[EntLib]微软企业库5.0 学习之路——第六步、使用Validation模块进行服务器端数据验证...
查看>>
【转】c++中引用的全方位解读
查看>>
MapGuide Maestro 5.1发布了
查看>>
C#中string与byte[]的转换帮助类
查看>>
海量数据面试题
查看>>
XMOVE3.0手持终端——软件介绍(一):精简型嵌入式管理系统的菜单实现和任务切换...
查看>>
iOS:实现图片的无限轮播(二)---之使用第三方库SDCycleScrollView
查看>>
Linux 僵尸进程
查看>>
ASP.NET Core 异常重试组件 Polly
查看>>