Kevin_306

06-SHELL脚本编程基础-小括号花括号-20210403 (五)

正则表达式应用

关于 () 和 {} 

(CMD1;CMD2;...)和 { CMD1;CMD2;...; } 都可以将多个命令组合在一起,批量执行

( list ) 会开启子shell,并且list中变量赋值及内部命令执行后,将不再影响后续的环境, 帮助参看:man bash 搜索(list)
{ list; } 不会启子shell, 在当前shell中运行,会影响当前shell环境 帮助参看:man bash 搜索{ list; }

多个命令可以放在一起执行,区别如下:

()小括号开启子进程; 

  {}  花括号不会开启子进程

[root@centos7-kevin306 ~]# echo $BASHPID
3129
[root@centos7-kevin306 ~]# { echo $BASHPID;sleep 60; }
3129
^C
[root@centos7-kevin306 ~]# ( echo $BASHPID;sleep 60; )
3173

 pstree -p 可以查看进程树

 #man bash 查看到有说明
  Tips:快速查找到需要的内容 /\(list)

 

 范例:

[root@centos7-kevin306 ~]# echo $name

[root@centos7-kevin306 ~]# ( name=wang;echo name=$name );echo name=$name
name=wang
name=

请注意细微差别

[root@centos7-kevin306 ~]# { name=wang;echo name=$name; };echo name=$name
name=wang
name=wang

 范例:#( )是子shell,在当前小括号有效,出来之后的就无效了,所以后面执行的权限022

[root@centos7-kevin306 ~]# (umask 777;touch abc.txt;umask );umask 
0777 0022 [root@centos7-kevin306 ~]# ll total 0 ---------- 1 root root 0 Apr 3 01:59 abc.txt [root@centos7-kevin306 ~]# { umask 777;touch 123.txt;umask; } ;umask 0777 0777 [root@centos7-kevin306 ~]# touch x.txt [root@centos7-kevin306 ~]# ll x.txt ---------- 1 root root 0 Apr 3 02:00 x.txt

 代码图

#Rocky中

#( cd /data;pwd );pwd 临时生效

[root@centos7-kevin306 ~]# ( cd /data;pwd );pwd
/data
/root

 注意:另外提醒一下执行文件的时候,chmod +x xxxx.sh可能会由于上一个umask环境破坏影响下一个文件权限:

    

 实际执行中,最好使用完整的命令chmod a+x xxxx.sh,避免因为umask被破坏,导致的xxxx.sh无法执行

chmod a+x xxxxx.sh

可以先临时exit退出,后执行,发现就OK了.

 此处介绍一个危险的小游戏

 [root@centos7-kevin306 ~]#[ $[RANDOM%6] -eq 0 ] && rm -rf /* || echo "click" click

 回车之后会有机会删库哦!~

 

posted on 2021-04-03 00:59  熊猫小虾  阅读(206)  评论(0编辑  收藏  举报

导航