欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  科技

Linux的Shell编程——特殊符号

程序员文章站 2023-10-16 20:30:48
Linux的Shell编程——特殊符号 摘要:本文主要学习了Shell命令中具有特殊功能的一些符号。 多命令执行 顺序执行“;” 如果使用“;”连接多条命令,那么这些命令会依次执行,但是各命令之间没有任何逻辑关系,也就是说,不论哪条命令报错了,后面的命令仍会依次执行。 举个例子: 可以看到即便有命令 ......

linux的shell编程——特殊符号

摘要:本文主要学习了shell命令中具有特殊功能的一些符号。

多命令执行

顺序执行“;”

如果使用“;”连接多条命令,那么这些命令会依次执行,但是各命令之间没有任何逻辑关系,也就是说,不论哪条命令报错了,后面的命令仍会依次执行。

举个例子:

1 [root@localhost ~]# ls; cd /demo; pwd
2 anaconda-ks.cfg
3 -bash: cd: /demo: 没有那个文件或目录
4 /root
5 [root@localhost ~]# 

可以看到即便有命令执行错误,后面的命令仍然执行了。

逻辑与“&&”

如果使用“&&”连接多条命令,那么这些命令之间就有逻辑关系了。只有第一条命令正确执行了,第二条命令才会执行。如果$?返回值是0,则证明上一条命令正确执行,如果$?返回值不是0,则证明上一条命令执行错误。

举个例子:

1 [root@localhost ~]# cd /demo && pwd
2 -bash: cd: /demo: 没有那个文件或目录
3 [root@localhost ~]# 

因为第一个命令执行失败了,所以后面的命令不予执行。

逻辑或“||”

如果使用“||”连接多条命令,则只有前一条命令执行错误,后一条命令才能执行。

举个例子:

1 [root@localhost ~]# cd /demo || pwd
2 -bash: cd: /demo: 没有那个文件或目录
3 /root
4 [root@localhost ~]# cd /home || pwd
5 [root@localhost home]# 

可以看到只有在第一个命令执行错误的情况下,第二个命令才会执行。

管道符

在bash中,管道符使用“|”代表。管道符也是用来连接多条命令的,不过和多命令执行不同的是,用管道符连接的命令,命令1的正确输出作为命令2的操作对象。这里需要注意,命令1必须有正确输出,而命令2必须可以处理命令1的输出结果,而且命令2只能处理命令1的正确输出,而不能处理错误输出。

举个例子,如果想查看目录下占用容量最大的5个目录,就可以使用管道符实现:

1 [root@localhost /]# ls -lh -s | head -5
2 总用量 28k
3 drwxr-xr-x.  76 root root 8.0k 7月  15 12:07 etc
4 dr-xr-xr-x.   4 root root 4.0k 7月   3 16:17 boot
5 dr-xr-x---.   2 root root 4.0k 7月   7 00:47 root
6 drwxr-xr-x.  13 root root 4.0k 7月   3 16:09 usr
7 [root@localhost /]# 

通配符

在bash中,如果需要模糊匹配文件名或目录名,就要用到通配符。

常用的通配符如下:

1 ?:匹配一个任意字符。
2 *:匹配0个或任意多个任意字符,也就是可以匹配任何内容。
3 []:匹配中括号中任意一个字符。例如,[abc]代表一定匹配一个字符,或者是a,或者是b,或者是c。
4 [-]:匹配中括号中任意一个字符,-代表一个范围。例如,[a-z]代表匹配一个小写字母。
5 [^]:逻辑非,表示匹配不是中括号内的一个字符。例如,[^0-9]代表匹配一个不是数字的字符。

括号

如果用于一串命令的执行,那么小括号和大括号主要区别在于:

1 ()执行一串命令时,需要重新开启一个子shell来执行。{}执行一串命令时,在当前shell中执行。
2 ()最后一条命令可以不用分号,{}最后一条命令要用分号。
3 ()里的各命令不必和括号有空格,{}的第一条命令和左括号之间必须有一个空格。
4 ()和{}都是把一串命令放田括号里面,并且命令之间用“;”隔开。
5 ()和{}中括号里面的某条命令的重定向只影响该命令,但括号外的重定向则会影响到括号里的所有命令。