LinuxShell——特殊符号
LinuxShell——特殊符号
摘要:本文主要学习了Shell命令中具有特殊功能的一些符号。
多命令执行
顺序执行“;”
如果使用“;”连接多条命令,那么这些命令会依次执行,但是各命令之间没有任何逻辑关系,也就是说,不论哪条命令报错了,后面的命令仍会依次执行。
举个例子:
[root@localhost ~]# ls; cd /demo; pwd
anaconda-ks.cfg
-bash: cd: /demo: 没有那个文件或目录
/root
[root@localhost ~]#
可以看到即便有命令执行错误,后面的命令仍然执行了。
逻辑与“&&”
如果使用“&&”连接多条命令,那么这些命令之间就有逻辑关系了。只有第一条命令正确执行了,第二条命令才会执行。如果$?返回值是0,则证明上一条命令正确执行,如果$?返回值不是0,则证明上一条命令执行错误。
举个例子:
[root@localhost ~]# cd /demo && pwd
-bash: cd: /demo: 没有那个文件或目录
[root@localhost ~]#
因为第一个命令执行失败了,所以后面的命令不予执行。
逻辑或“||”
如果使用“||”连接多条命令,则只有前一条命令执行错误,后一条命令才能执行。
举个例子:
[root@localhost ~]# cd /demo || pwd
-bash: cd: /demo: 没有那个文件或目录
/root
[root@localhost ~]# cd /home || pwd
[root@localhost home]#
可以看到只有在第一个命令执行错误的情况下,第二个命令才会执行。
管道
应用场景
在执行shell命令的时候,会有数据输出到屏幕上,在某些情况下还需要对输出到屏幕上的数据进行处理,这时就需要用到管道了。
定义
管道命令是一种能接收标准输出数据,并进行处理的命令。
管道命令使用“|”作为界定符,在界定符后面的命令就是管道命令,界定符前面的命令可以为非管道命令,但这个非管道命令必须要有标准输出。
管道命令只能处理标准输出,对于标准错误输出会进行忽略,但可以在非管道命令里通过数据流重定向进行处理。
管道命令和多命令
管道命令要求前面一个命令必须要有标准输出,而且要求后面一个命令必须能接收标准输出。多命令对是否有标准输出没有要求。
举例
如果想查看目录下占用容量最大的5个目录,就可以使用管道符实现:
[root@localhost /]# ls -lh -S | head -
总用量 28K
drwxr-xr-x. root root .0K 7月 : etc
dr-xr-xr-x. root root .0K 7月 : boot
dr-xr-x---. root root .0K 7月 : root
drwxr-xr-x. root root .0K 7月 : usr
[root@localhost /]#
通配符
在BASH中,如果需要模糊匹配文件名或目录名,就要用到通配符。
常用的通配符如下:
?:匹配一个任意字符。
*:匹配0个或任意多个任意字符,也就是可以匹配任何内容。
[]:匹配中括号中任意一个字符。例如,[abc]代表一定匹配一个字符,或者是a,或者是b,或者是c。
[-]:匹配中括号中任意一个字符,-代表一个范围。例如,[a-z]代表匹配一个小写字母。
[^]:逻辑非,表示匹配不是中括号内的一个字符。例如,[^-]代表匹配一个不是数字的字符。
括号
如果用于一串命令的执行,那么小括号和大括号主要区别在于:
()执行一串命令时,需要重新开启一个子Shell来执行。{}执行一串命令时,在当前Shell中执行。
()最后一条命令可以不用分号,{}最后一条命令要用分号。
()里的各命令不必和括号有空格,{}的第一条命令和左括号之间必须有一个空格。
()和{}都是把一串命令放田括号里面,并且命令之间用“;”隔开。
()和{}中括号里面的某条命令的重定向只影响该命令,但括号外的重定向则会影响到括号里的所有命令。
数据流重定向
平常我们在输入的命令或者在屏幕上显示的信息就是数据流。数据流重定向就是使输入的命令信息来自于文件而不是终端的输入,或者将输出的数据传输到文件中而不在屏幕上显示。
分类
输入流重定向:将原本需要从键盘的输入中获取数据,改由从文件的内容中获取。
输出流重定向:将原本需要输出到终端的数据,输出到文件中,文件不存在则创建。
输出流重定向
输出流有两种,分别是标准输入和标准错误输出:
标准输出(stdout):输出的信息是正确信息。代码为1。使用>将导致文件内容被覆盖,使用>>将在文件尾部追加。
标准错误输出(stderr):输出的信息是错误信息。代码为2。使用>将导致文件内容被覆盖,使用>>将在文件尾部追加。
举个例子,将文件列表写入trueFile,错误的结果将会显示在屏幕上:
[root@localhost ~]# ls a b > trueFile
举个例子,将正确的结果写入trueFile,将错误的结果写入falseFile:
[root@localhost ~]# ls a b > trueFile > falseFile
举个例子,将正确的结果写入trueFile,将错误的结果丢弃:
[root@localhost ~]# ls a b > trueFile > /dev/null
输入流重定向
标准输入(stdin):从键盘中输入的信息。代码为0。使用<后面接想要输入的文件,使用<<后面接终止输入的结束符。
举个例子,将test文件中的内容输入到file文件中:
[root@localhost ~]# cat > file < test
举个例子,将键盘输入的内容保存在file文件中,并且当输入end的时候终止输入,end不会被保存:
[root@localhost ~]# cat > file << end
最新文章
- HTML5 标签 details 展开 搜索
- 黑马程序员_Java基础:集合总结
- SqlServer索引及优化详解
- [java] java解析txt文件
- 第一部分 CLR基础:第3章 共享程序集和强命名程序集
- 大一下C#五子棋大作业
- eclipse中自动生成javadoc文档
- MVC 中的Areas支持
- HTML之框架(frameest、ifram)
- Python中lambda用法
- while求1+2+3+4+5+6....100的和
- DVWA 黑客攻防演练(九) SQL 盲注 SQL Injection (Blind)
- 洛谷P3205 [HNOI2011]合唱队 DP
- use redis instance in docker hub
- Mastering MariaDB 神秘的MariaDB 中文翻译版
- 大叔力量VIP介绍
- 【emWin】例程十三:字库放到外部存储器
- Java笔记 #03# HtmlUnit爬虫
- Cookie-base 认证实现(学习笔记)
- [Web 前端] mockjs让前端开发独立于后端