- 首页 > 睿知 > it技术 > >
输入重定向->语法
wc获取到的三个重要信息
语法结构: wc 文件名称
第一个参数: 文本行数
第二个参数: 文本词数
第三个参数: 文本字节数注意:
输入重定向需要cat配合
cat 文件名
________________________________________________________
输出重定向
在temp.sh中添加:echo "重定向到2" > temp2.sh这个是把temp2.sh的内容替换为"重定向到2"echo "重定向到2" >> temp2.sh这个是追加到后面
重定向输入和输出还有错误的概念:
shell脚本语言将: 输入,输出,错误分为了三中描述符:
输入: 0
输出: 1
错误: 2
::::::::::::::::::第一种:STDIN标准输入->0->也就是键盘输入
使用:
直接在终端输入cat
然后输入任何字符点击回车就是打印刚才输入的内容例子:
xiaojie@bogon Desktop $ cat
111
111
222
222
::::::::::::::::::::::::::::::::::::::::::::::::::::::
第二种非标准输入:非STDIN-> 文件输入;
也就是读取文件内容,输出到控制台
例子
xiaojie@bogon Desktop $ touch han.txt
xiaojie@bogon Desktop $ open han.txt
xiaojie@bogon Desktop $ cat han.txt
111
222
33
4
说明:open打开文件han.txt输入内容;
::::::::::::::::::::::::::::::::::::::::::::::::::::::
第三种: STDOUT-> 标准输出->1->对应终端显示
例子:属于输出
xiaojie@bogon Desktop $ cat han.txt
111
222
33
4
再例子:
who >> sh.sh
who说明:意思是输出当前用户信息到控制台;
而此处的意思是追加用户信息到sh.sh到文件中;
重定向错误信息->输出到文件中
例子:
如果当前文件shs.sh不存在则执行:
xiaojie@bogon Desktop $ ls -l shs.sh
会报如下错误
ls: shs.sh: No such file or directory
此时将错误信息输入到文件中需要执行:
ls -l shs.sh 2> sh.sh
如果是覆盖那就使用>如果是追加就使用>>说明:
如果是查看多个文件可以在后面追加例如:
ls -l shs.sh shs1.sh shs2.sh
标记重定向 >&2
例如在文件sh.sh中写入内容
echo "我是错误标记" >&2
echo "我是正确的"
在终端输入:
./sh.sh 2> error.sh
结果打开open error.sh可以看到
我是错误标记
永久重定向
exec命令 批量输出
例如:在sh.sh中输入一下内容
exec 1> error.sh
echo "你好"
echo "我好"
echo "大家好"执行文件:./sh.sh
我们会在error.sh中看到
你好
我好
大家好说明:
如果改成错误2是不会打印的必须标记错误标识>&2
exec 2> error.sh
echo "你好" >&2
echo "我好"
echo "大家好"
以上执行命令只会打印:
你好
创建自定义重定向
exec 3>&1
exec 1>temp.sh
echo "你好"
echo "你好1"
echo "你好2"
exec 1>&3
其实我也没咋搞明白这个有什么意义
把3定向到1;
最后再把1给定向到3例子
exec 6<&0
exec 0
创建读写文件描述符
作用:一个文件既可以读也可以写
exec 3<>temp.sh
#读取文件内容
read line <&3
echo "Read: $line"#写入内容
echo "My Name is Tom" >&3
创建文件读写描述符"<>"
#!/bin/bash
#创建文件描述符
exec 3<>temp.sh
#循环读取内容
while read line<&3
do
echo "读取到的数据: $line"
done
#向temp.sh写入内容
echo "读取结束" >&3
关闭文件描述符">&-"
#!/bin/bashexec 3<>temp.sh
while read line<&3
do
echo "读取到的数据: $line"
done
#关闭文件描述符
exec 3>&-echo "读取结束"同时需要说明:
关闭之后是不能再使用3的不然会报错
推荐阅读