io

I/O

重定向不是命令

  • 程序自身都有I/O

    • 0: 标准输入
    • 1: 标准输出
    • 2:错误输出
  • 控制程序I/O位置

  • 一切皆文件

    • /proc/$$/fd
  • 程序是否处理I/O

  • 重定向绑定顺序:从左到右

ls / /hello 1 > log.out  #正确输出结果导入到log.out中
ls / /hello 1 > log.out 2>log.err   #正确输出导入到log.out 错误输出导入到log.err

将用户控制台的输入赋值给aaa变量

read在不提供参数的时候,会将用户的输入存储在REPLY变量中

[root@node1 ~]# read
abc
[root@node1 ~]# echo $REPLY
abc

如果提供了参数,则赋值给指定的参数

[root@node1 ~]# read aaa
nihao 
[root@node1 ~]# echo aaa
nihao 

[root@node1 test]# vim rd.sh
#!/bin/bash
read -p "请输入一个整数:" num
echo $num
read -p"再输入一个整数:"
echo $REPLY
[root@node1 ~]# chmod +x rd.sh
[root@node1 ~]# ./rd.sh
请输入一个整数:100
100
再输入一个整数:3
3
[root@node1 ~]# sh -x read.sh
+ read -p "请输入一个整数:" num
请输入一个整数:100
100
+ read -p"再输入一个整数:"
再输入一个整数:3
3

显示脚本执行过程:

[root@node1 ~]# sh -x read.sh

将标准输入重定向到字符串,read读取后赋值给指定的变量:

<<<将标准输入重定向到字符串

[root@node1 ~]# read aaa 0<<<"hello"
[root@node1 ~]# echo $aaa
hello

用在脚本中用于向控制台打印n行

[root@node1 ~]# cat 0<<CATEOF
>aaa
>bbb
>ccc
>CATEOF
aaa
bbb
ccc

exec:使用指定的命令替换当前shell命令。

创建文件描述符:

exec 8<> /dev/tcp/www.baidu.com/80  # 以读写方式打开到www.baidu.com的80端口的tcp连接
echo -e "GET / HIIP/1.0\n" >& 8  # 重定向到8文件描述符
cat <& 8  # 从文件描述符8读取信息以读写方式打开到www.baidu.com的80端口的tcp连接
....

cd  /proc/$$/fd  # 查看文件描述符
ll
posted @ 2021-10-04 12:40  程胥员  阅读(102)  评论(0)    收藏  举报