LinuxShell——特殊符号

LinuxShell——特殊符号

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

多命令执行

顺序执行“;”

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

举个例子:学习

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

能够看到即使有命令执行错误,后面的命令仍然执行了。spa

逻辑与“&&”

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

举个例子:blog

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

由于第一个命令执行失败了,因此后面的命令不予执行。class

逻辑或“||”

若是使用“||”链接多条命令,则只有前一条命令执行错误,后一条命令才能执行。test

举个例子:file

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

能够看到只有在第一个命令执行错误的状况下,第二个命令才会执行。终端

管道

应用场景

在执行shell命令的时候,会有数据输出到屏幕上,在某些状况下还须要对输出到屏幕上的数据进行处理,这时就须要用到管道了。

定义

管道命令是一种能接收标准输出数据,并进行处理的命令。

管道命令使用“|”做为界定符,在界定符后面的命令就是管道命令,界定符前面的命令能够为非管道命令,但这个非管道命令必需要有标准输出。

管道命令只能处理标准输出,对于标准错误输出会进行忽略,但能够在非管道命令里经过数据流重定向进行处理。

管道命令和多命令

管道命令要求前面一个命令必需要有标准输出,并且要求后面一个命令必须能接收标准输出。多命令对是否有标准输出没有要求。

举例

若是想查看目录下占用容量最大的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 ()和{}中括号里面的某条命令的重定向只影响该命令,但括号外的重定向则会影响到括号里的全部命令。

数据流重定向

日常咱们在输入的命令或者在屏幕上显示的信息就是数据流。数据流重定向就是使输入的命令信息来自于文件而不是终端的输入,或者将输出的数据传输到文件中而不在屏幕上显示。

分类

输入流重定向:将本来须要从键盘的输入中获取数据,改由从文件的内容中获取。

输出流重定向:将本来须要输出到终端的数据,输出到文件中,文件不存在则建立。

输出流重定向

输出流有两种,分别是标准输入和标准错误输出:

1 标准输出(stdout):输出的信息是正确信息。代码为1。使用>将致使文件内容被覆盖,使用>>将在文件尾部追加。 2 标准错误输出(stderr):输出的信息是错误信息。代码为2。使用>将致使文件内容被覆盖,使用>>将在文件尾部追加。

举个例子,将文件列表写入trueFile,错误的结果将会显示在屏幕上:

1 [root@localhost ~]# ls a b > trueFile

举个例子,将正确的结果写入trueFile,将错误的结果写入falseFile:

1 [root@localhost ~]# ls a b > trueFile 2> falseFile

举个例子,将正确的结果写入trueFile,将错误的结果丢弃:

1 [root@localhost ~]# ls a b > trueFile 2> /dev/null

输入流重定向

1 标准输入(stdin):从键盘中输入的信息。代码为0。使用<后面接想要输入的文件,使用<<后面接终止输入的结束符。

举个例子,将test文件中的内容输入到file文件中:

1 [root@localhost ~]# cat > file < test

举个例子,将键盘输入的内容保存在file文件中,而且当输入end的时候终止输入,end不会被保存:

1 [root@localhost ~]# cat > file << end
相关文章
相关标签/搜索