Linux Bash Shell编程(三):重定向、多命令顺序、通配符、特殊符号
2020-08-08 21:30
681 查看
Linux Bash Shell编程(三):重定向、多命令顺序、通配符、特殊符号
上一节我们学习了Bash中的基本功能,相信经过前两节的学习,大家平时使用Bash的效率得到了一点提高。本节,我们将继续探索Bash特性,了解重定向、多命令顺序逻辑连接符、通配符和管道符以及其他特殊符号。
1.重定向
重定向,主要分为输入重定向和输出重定向。顾名思义,它是对输入输出的方式重新进行确定,但何为“重”?这要先从标准输入输出说起。
设备 | 设备文件名 | 文件描述符 | 类型 |
---|---|---|---|
键盘 | /dev/stdin | 0 | 标准输入 |
显示器 | /dev/stdout | 1 | 标准输出 |
显示器 | /dev/stderr | 2 | 标准错误输出 |
显示器是计算机的标准输出和标准错误输出设备,程序\命令的输出都会在显示器上(及命令行下方和程序运行时打开的终端)
输出重定向
输出重定向,是将原本在显示器上显示的输出内容写入文件中,而显示器中不显示。语法如下,
命令 > 文件 #将命令的执行输出(正确输出)以覆盖方式写入文件中 命令 >> 文件 #将命令的执行输出(正确输出)以追加方式写入文件中 命令 2> 文件 #将命令的错误输出(正确不会输出)以覆盖方式写入文件中 命令 2>> 文件 #将命令的错误输出(正确不会输出)以追加方式写入文件中
注意:输出方式 > 为覆盖方式(即将文件原有内容清空,重新写入内容);>> 为追加方式(即在文件末尾追加内容(换行)而不改变原内容)。下文中不再赘述
- 输出重定向中的“输出”指的是正确输出,而不是错误返回值。也就是说,只有在命令\程序执行正确时才会输出内容,错误时完全不写入(若指定了一个新的文件名,则会创建文件,但文件中没有内容)
- 错误输出中“2”与“>”之间没有空格,请注意
同时保存输出和错误输出
命令 > 文件 2>&1 #无论是输出和错误输出,都保存进文件中。前面可以指定覆盖>和追加>>,后面2>&1不能修改 命令 &> 文件 #效果同上 命令 >>文件1 2>>文件2 #若正确,则输出到文件1;若错误,则输出到文件2
- 第三种方法的输出方式选择比较容易弄错,两个输出方式符号若同为>>,则输出和错误输出都为追加输出,若两种有一个为>,则都会覆盖输出,请注意。
丢弃输出
如果不想在程序执行的过程中有显示器输出又不想重定向写入文件,可以将输出重定向到
/dev/null设备中,此设备为空设备(顾名思义),写入其中对系统没有任何影响
输入重定向
这里以命令
wc(字符串统计命令)为例
wc <string> #统计输入字符串的行数、单词数(按空格和行计)、字数 #输入以 ctrl+d 停止
这里手动输入并没有太大的实际作用,我们可以将其输入重定向到文件中,即可统计文件中的数据
#重定向语法 命令 < 文件 wc < test #下面是实际操作 zheng@Kali:~$ wc < test 5 7 31
2.多命令顺序执行和逻辑符
多命令执行符和逻辑符 | 格式 | 作用 |
---|---|---|
; | 命令1;命令2 | 多个命令顺序执行,命令之间没有逻辑关系 |
&& | 命令1&&命令2 | 逻辑与 当命令1正确执行,命令2才会执行 当命令1执行不正确,命令2不会执行 |
|| | 命令1||命令2 | 逻辑或 当命令1执行不正确,命令2才会执行 命令1正确执行,命令2不会执行 |
一个问题
请大家思考一下,对于下面的三个命令,它们得到的返回值如何?
cd abc && echo "yes" || echo "no" cd abc || echo "no" && echo "yes" cd abc || cd abc && echo "no" #当前目录不存在abc目录
对于第一行命令,会输出“no”,第二条命令没有执行,看作未成功执行,前面未成功执行故第三条命令执行输出“no”;对于第二行命令,第一条命令不执行第二条命令可以执行并执行成功,故第三条命令也执行;而对于第三行命令,第一条执行错误,执行第二条,同样出现错误,第三条不会执行
3.管道符和通配符
管道符
可以将前一个命令的正确输出作为第二个命令的操作对象(需要第一个命令有输出)
命令1 | 命令2 #语法 netstat -an | grep "ESTABLISHED" #例子,netstat命令显示所有连接,grep命令筛选出所有含"ESTABLISHED"的行 #作用为查看所有已建立的连接
通配符
通配符 | 说明 |
---|---|
? | 匹配任意一个字符 |
* | 匹配任意个字符(可为空) |
[] | 匹配括号中任意一个字符。[abc]表示匹配a或b或c |
[-] | 匹配中括号中任意一个字符,表示范围,[a-z]表示所有小写字母 |
[^] | 不匹配中括号中所有字符[^0-9]表示非数字字符 |
通配符可以用于对文件的统一处理等。请大家建立几个文件,用实际操作的方法加深对通配符的印象。
4.其他特殊符号
特殊符号 | 解释 |
---|---|
’ ’ | 单引号,在单引号中的所有特殊符号都没有特殊意义(除,不是特殊符号),包括` $ |
“” | 除\ $ `外的特殊符号都没有特殊意义(转义、调用变量的值、引用命令) |
`` | 反引号,其中内容是系统命令,在bash中会先执行它,推荐$() |
# | shell脚本中表示注释 |
$ | 用于调用变量的值,$name |
\ | 转义符,跟在\之后的特殊符号没有特殊含义,转义符后的特别意义,见第一节echo转义符 |
- 反引号中内容会被识别为系统命令,首先执行,再将输出覆盖在原来位置
实验
zheng@Kali:~$ echo '$(date)' $(date) #单引号消除了$引用的特殊含义 zheng@Kali:~$ echo "$(date)" 2020年 08月 08日 星期六 09:16:33 EDT #双引号不能消除$的特殊含义
下一节,Linux Bash Shell编程(四):变量(上) 变量分类与相关操作
我们将一起了解Bash中的变量相关知识
相关文章推荐
- Shell脚本基础之Bash的基本功能——历史命令(history)、命令和文件补全(Tab键)、命令别名(alias)、常用快捷键,输入输出重定向、多命令顺序执行、管道符、通配符与其他特殊符号
- shell基础-输入输出以及重定向/多命令顺序执行与管道符/通配符与特殊符号
- Linux学习笔记--命令的顺序执行、管道符、通配符、其他特殊符号
- Linux笔记 Day05---(history用法、命令别名、变量、特殊符号、管道及重定向)
- Linux曲径通幽:Shell编程(别名、历史、输入输出重定向、多命令顺序执行、管道符、通配符)
- linux 命令系列之 Linux常见的通配符和特殊符号(45)
- linux Linux常见特殊符号 重定向符号
- Linux 命令 常见特殊符号
- linux学习:特殊符号,数学运算,图像与数组与部分终端命令用法整理
- linux下的通配符与特殊符号
- linux学习第二十三篇:shell介绍,命令历史,命令补全和别名,通配符,输入输出重定向
- Linux笔记(shell基础,历史命令,命令补全/别名,通配符,输出重定向)
- Linux的通配符(wildcard)和bash下的特殊符号
- [linux_shell]Bash通配符与特殊符号
- Linux_BASH中组合按键、通配符、特殊符号
- linux的通配符与特殊符号
- linux-命令替换-通配符-重定向-管道
- linux 管道符号 | ,以及&& ||等等特殊符号、通配符
- Linux学习命令汇总四——Bash中变量.文件通配符.管道与重定向.算术运算及循环或判断语句
- [Linux](九) --shell bash学习----通配符与特殊符号