目录
输出重定向
当我输⼊⼀个命令之后,回⻋,命令产⽣了结果,结果默认是输出到屏幕上的。
默认情况,⽆论⼀个命令执⾏正确与否,结果都会默认输出到屏幕上。
在有些情况下,我可能需要保留命令或脚本输出的结果。当作log,用作后面分析。
cat /cat /etc/hosts
产生的结果是正确的,我们可以使用 >
和 >>
见这个命令的正确结果输出到一个文件中
bash
[root@bogon ~]# cat /etc/hosts
127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
::1 localhost localhost.localdomain localhost6 localhost6.localdomain6
[root@bogon ~]# cat /etc/hosts > /root/file1
[root@bogon ~]# cat /etc/hosts
127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
::1 localhost localhost.localdomain localhost6 localhost6.localdomain6
[root@bogon ~]# cat file1
127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
::1 localhost localhost.localdomain localhost6 localhost6.localdomain6
cat /etc/hosts > /root/file1
就是将 >
前面命令的结果送到 /root/file1
文件中,而不是屏幕上。
-
>
和>>
:是正确的重定向,能将正确的结果重定向到⽂件中,区别是>
会将指向的⽂件内容完全覆盖>>
会将重定向的内容追加到指定的⽂件,>
就是正确的覆盖,>>
就是正确的追加 -
2>
:就是错误的覆盖 -
2>>
:就是错误的追加 -
&>
:正确错误都覆盖 -
&>
>:正确错误都追加 -
&>> /dev/null
:/dev/null
是⼀个特殊的⽂件,如果将重定向指向这个⽂件,那么就相当于将执⾏结果送到⿊洞中。直接没了,有些时候,我们不想让这个命令的输出显示到任何地⽅,就送到⿊洞中。
输入重定向
可以将交互式命令变成非交互式命令
<
<
和<<
的作用完全不一样
<
可以将<
前命令需要执行后产生需要进行交互的内容,通过后面文本中预先写好的内容进行操作,这个看起来很是鸡肋,但是在编写shell脚本是不可缺少的。
为了刚明显的看出,举个实例:
bash
## 编辑一个1.txt文件,在里面写入一些内容
[root@bogon ~]# cat 1.txt
helld world!!!
## 在2.txt写入y,表示yes
[root@bogon ~]# echo y > 2.txt
[root@bogon ~]# cat 2.txt
y
## 编辑3.txt文件,在里面写一些不同于1.txt的内容
[root@bogon ~]# cat 3.txt
I love the world!!!
## 将1.txt文件中的内容覆盖到3.txt文件中,会显示"cp: overwrite '3.txt'? ",只需要输入y,就能将1.txt的内容已经覆盖3.txt文件
[root@bogon ~]# cp 1.txt 3.txt
cp: overwrite '3.txt'? y
[root@bogon ~]# cat 3.txt
helld world!!!
## 重新对3.txt进行编写
[root@bogon ~]# cat 3.txt
I love the world!!!
## 如果使用输入重定向,就可以不用手动输入y,可以将2.txt中的内容,进行输出,直接完成结果
[root@bogon ~]# cp 1.txt 3.txt < 2.txt
cp: overwrite '3.txt'? [root@bogon ~]# cat 3.txt
helld world!!!
<<
一般是和cat进行连用
当执行一个单个的cat时候,会进入到交互界面,退出时执行使用 Ctrl+C 进行终止,但是使用 <<
就可以手动进行终止
在<<
后面写入的内容,会作为结束的标志,进行退出
bash
[root@bogon ~]# cat << qqq
> nihao
> hello
> aaaa
> adsad
> qqq
nihao
hello
aaaa
adsad
[root@bogon ~]#
在<<
后面些qqq
之后,在cat
界面,输入qqq
之后,就会执行出现在前方写入的内容,紧接着就会退出cat
的交互式界面
这种方式多使用在脚本编写中,可以将内容输入到指定的文件中,一般情况下<<
之后写的是END
,这里便于理解,就随便写了一串字母
bash
[root@bogon ~]# cat > 4.txt << ooo
> aaaa
> bbbb
> ccccasd
> aasdexffd
> ooo
[root@bogon ~]# cat 4.txt
aaaa
bbbb
ccccasd
aasdexffd
[root@bogon ~]#
管道操作
管道的符号是 |
⽂件管理⾥⾯⽐较重要的内容
管道左边的命令会产⽣输出结果,输出结果经过了管道之后,就会变成输⼊。
管道右边的命令,总是接收输⼊的命令
bash
[root@bogon ~]# cat hello.txt
How are you?
what are you doing?
## 查看hello.txt中的内容,并把所有字母转变为大写
[root@bogon ~]# cat hello.txt | tr 'a-z' 'A-Z'
HOW ARE YOU?
WHAT ARE YOU DOING?
## 转变为大写之后,输出,并保存到hello2.txt文件中
[root@bogon ~]# cat hello.txt | tr 'a-z' 'A-Z' | tee hello2.txt
HOW ARE YOU?
WHAT ARE YOU DOING?
[root@bogon ~]# cat hello2.txt
HOW ARE YOU?
WHAT ARE YOU DOING?
## 查找hello2.txt中有HOW的内容
[root@bogon ~]# cat hello2.txt | grep HOW
HOW ARE YOU?
## 显示有HOW内容的行数
[root@bogon ~]# cat hello2.txt | grep HOW | wc -l
1