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
回车之后会有机会删库哦!~