Linux重新学习--shell--IO

输入

最常用的莫过于read了, read的用法形式是: read options var1 var2 .

read的行为是这样的,它会以$IFS作为分隔符,将输入进行分割并赋给各个变量,单词的个数大于变量的个数,则将剩下的内容全都赋给最后一个变量,那么有同学就要问了,如果变量的个数大于单词的个数呢? so easy, 那么剩下的变量就没有值呗!

最常用的选项是 -r, (raw), 也就是忽略输入字符的特殊含义,比如你输入了一个 \,然后回车, 如果不添加 -r 则会换行继续等待输入,如果添加了 -r, 则表示输入结束,\ 也是你的输入字符之一。

默认情况下, read是用 $IFS 也就是空格来进行单词的分割的,当然你也可以使用其他的分割符号, 此时你就需要先设置IFS再进行read。举例说明:

while IFS=: read var1 var2

do

done < file.txt

对于为什么将file.txt放在done后面,我是这么理解的, 到done的时候表示这个循环的结束,也就是我们可以认为这段代码等同于一个单独的指令, 想想我们怎么用重定向,是不是 command < file.txt ??


重定向

常用的重定向运算符有 <, >, >>, |。实际上还有其他的哦,在写代码时也是非常有用的。

set -C 禁止覆盖,也就是当使用 > 进行重定向时,如果目标文件已经存在则会失败,使用 >| 就可以成功。

<<与<<- 行内输入, 这种重定向可以在脚本内部事先确定需要重定向的内容,例如

command << eof

>hello world

>eof

这里的eof是结束符, 大家可以根据自己的情况随便设置一个,以便能够使<< 知道什么时候输入结束。

另外一种形式是带有 - 的<<, 他会将所有开头的tab全部删除。


文件描述符

文件描述符就是一个整数,用于表示进程打开的文件, 这个数字是有上限的,每一个系统貌似还不太一样。

数字 0, 1, 2代表的文件是固定的,分别是标准输入, 标准输出,标准错误。目前为止,我们对文件描述符所做的最多的就是把他们重定向到其他地方, make 1>results 2>errs. z这里的 1 实际上没有什么必要,因为默认的就是标准输出,所以这么写就OK, make > result 2>&1, 这里需要解释一下了, > results表示将标准输出重定向到results,那么此后所有输出都会被重定向到results, 包括接下来的 2>&1, &的意思是无论 1 在什么地方。这里需要特别注意顺序问题,从左到右不能乱。另外,shell会在文件描述符重定向之前处理管道,例如 make 2>&1 |..., 会先将错误与输出传递给管道。


exec

使用这个命令可以更改文件描述符, 打开新的文件描述符等。 下面举几个例子说明一下:

exec 5<path/to/file  打开新的文件描述

exec 5>&2  将标准错误输出复制到5上,也就是错误会输出到5上

exec 5>&-  关闭5.

exec 2>path/to/file  重定向错误输出

对于exec,还需要知道一个更加重要的事情:在shell脚本中可以使用它来开启一个新的进程运行其他的程序,但是新进程会取代shell, 控制权不再回到shell, 除非新程序启动失败。


printf

类似于C语言中的printf,功能要比echo强大太多,大家自己去查查看吧。







评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值