1.4.2 linux和高并发-shell编程-文本流及重定向

1.写在前面

        我们上次简单提了一下bash,bash还有一些比较重要的内容,我们想放到后面讲管道知识的时候在再重点提及。这次呢先讲一下文本流和重定向的知识。我个人认为,脚本编程是非常重要的一个环节,是无法替代的,自动化一直以来是人们追求的梦想。

2.文本流&重定向

        流和我们java中文件流差不多,有输入有输出。那么重定向是什么呢?web中有转发和重定向,和那个是一回事。fd是文件描述符可以实现重定向操作。进到fd里面,最后那个0表示服务端号,再连接一个xshell,就会变成1.

        查进程号:

3.输出重定向

        任何一个命令都有012这样一个标准输入输出方式,重定向是什么意思:重定向是人为的干预012这样一个输出位置。比如:本来输出到控制台,现在重定向到一个文件中。一个>表示覆盖原来的文件,>>表示不覆盖,继续再下面追加文件内容

        正常输出输出到一个文件里面:

        错误输出输出到一个文件里面:

        正确的、错误的分开输出到各自的文件:

        检索顺序是先检索是否有这个目录,然后输出是从左边到右边。所以下面这个显示是正常输出,因为先检测是否有目录,报错误输出,打印到文件。然后正常输出将其覆盖掉。

 

        把错误输出和标准输出合并到一个文件:(&> 和 >& 这两种写法都可以

        请大家注意一下,1 2 等和重定向符号之间不能加空格,不然会将其作为目录报错,重定向符号后面可以加空格。

4.输入重定向

        < 可以表示输入重定向,有三种方式:<<<从一个字符串输入;<<E  多行输入,E退出;< 从文件输入。

        我们可以看到使用read命令可以实现输入命令:(输入重定向)

        read命令对于换行符号特别敏感,将第一行赋值之后,看到换行符就将后面的东西都舍弃掉了。必须键入命令AABB(自己定义)之后才退出输入。

        我们可以将read命令键入文本shell脚本中:

        可以将read修改为cat命令,直接打印作为输入提示:

        把第一行给注释掉,会当做bash命令执行,报错:

5.重定向具体实例

5.1 exec命令

        我们将会在linux中访问baidu。在windows里面可以直接通过浏览器进行访问,在linux里面不能这样干。首先我们先看一个命令exec:

        可以看到将我们的目录先展示出来了,后面直接退出了。为什么会退出呢?我们先来看一下exec是干啥的:通过给定的命令取代原来的shell。我们的shell是我们的一个壳,壳子里面是核程序,ls也是我们的一个外部命令,指向某一个文件。通过那个文件的执行,执行ls的功能。exec执行完退出,但是这个时候cpu里面是ls的bash命令,这个还是bash退出,ssh这个服务也会退出。

5.2 全重定向:socket案例-访问百度

        首先我们使用exec进行访问baidu.com,访问完成之后,我们的文件夹下面多了一个文件夹socket【57814】。

        把Get/Http/1.0 标准输出定位到8文件描述符上面。8这个文件要发socket请求,连接到我们百度的服务器,请求根目录。请求完之后返回一个数据,我们这个时候就会有响应了,打印我们的响应:(cat可以接受我们的标准输入0,0这个标准输入来自于8文件)。并且http1.0是一个短连接,只能接受回来一次数据。

        http1.0是一个短连接,只能接受回来一次数据。所以我们想要再次重复这个实验的时候,需要从exec命令重新开始。想要把这个socket文件删除直接删除是不行的,只需要重新登录即可(重新ssh,进程号也不一样了)。

发布了322 篇原创文章 · 获赞 216 · 访问量 27万+

猜你喜欢

转载自blog.csdn.net/Suyebiubiu/article/details/104496290