第12 章 显示数据

12.1  了解输入和输出

12.1.1 标准文件描述符  

linux 使用文件描述符,标识每个文件对象 

STDOUT  和  STDERR  

STDERR  时shell 发送  错误消息的  目的地,默认情况下 STDERR  和 STDOUT文件描述符

指向相同的位置,即显示器。重定向 STDOUT  不会自动重定向 STDERR 

12.1.2  重定向错误

ls  -al   badfile  2> test4    文件重定向符必须位于 > 前  

ls  -al  test1 test2  test3 2>test5  (文件test1  test2   存在)屏幕会显示1 ,2 信息  ,test3的错误信息

会重定向到test5

2.  重定向错误和数据

如果需要重定向 错误 和 输出, 需要两个 文件重定向符

ls  -al  test1  test2  test3  2>test5   1>test6

1>  重定向 STDOUT 

2> 重定向STDERR

也可以将 STDOUT  和 STDERR 重定向 到一个文件 (&)

ls -al test1  test2  test3   &> test5

12.2 在脚本中重定向输出

12.2.1  临时重定向

如果想故意在脚本中生成错误消息,可以将单个输出行重定向到 STDERR ,需要做的只是使用

输出重定向 符号,将  输出  重定向到 STDERR文件描述,还必须在文件描述符前面添加&

echo "this  is  a  error  message" >   &2

该行在脚本的STDERR指向的地方,而不是STDOUT指向的地方显示。

12.2.2 永久重定向

exec命令通知shell 在脚本执行期间重定向特定的文件描述

exec  2>testerror

echo "这条语句不会重定向 到testfile "

exec  1> testfile

echo "this is a test of   会重定向"

echo "this  is  a  two     会重定向"

echo "this is a three     会重定向"

exec 启动一个新shell ,并将STDOUT 文件描述符重定向到一个文件,

12.3 在脚本中重定向输入

exec  0 <   testfile              应该 从文件 testfile 而不是 STDIN  获取输入

count=1

while  read line

do

     echo "line   #$count : $line"

     count=$[ count +1 ]

done

12.4  创建自己的重定向

12.4.1  创建输出文件描述符 

exec  3>test13out   (文件描述符3 的文件位置   重定向到 test3out )  

echo "this should  display on the monitor"

echo "and this should  be  stored  in  file " >&3     (该条信息 保存到 test13out )

echo " then this should be back on the  monitor  "

12.4.2 重定向文件描述符

exec  3>&1     (文件描述符3重定向到文件描述符1的当前位置,即3对应标准输出)

exec 1>test13out   (将文件描述符1的当前位置 重定向到  文件  test13out  )

echo "this should be stored  in the  output  file "

exec  1>&3  (将文件描述符1的当前位置重定向到3  对应的当前位置,即标准输出)

echo "this should be  back to normal"

12.4.3 创建输入文件描述符

在重定向到文件之前,将 STDIN文件描述符位置保存到另一个文件描述符,然后在完成了文件读取

操作之后,可以将STDIN 恢复为原来的位置

exec  6 <&0  ( STDIN文件描述符位置保存到另一个文件描述符)

exec 0<testfile

count=1

while read  line

do

      echo "Line  #$count : $line "

      count=$[count+1]

done

exec  0<&6

read  -p  "done  ?"  answer

case  $answer  in 

Y|y)   echo "goodbye" ;;

N|n)  echo "sorry,this is the  end  ";;

esac

12.4.4 创建读取 和写入文件描述符

输入和输出可以同时打开同一个文件描述符,可以同时使用同一个文件描述符,从

一个文件读取数据  和 写入 数据 。

读取 、写入时  shell 维护一个内部指针,指示文件内部位置,读取和写入都发生在指针

上次放置的位置,

exec  3<>testfile

read line  <&3              (从文件描述符3 当前位置,读取一行 )内部指针处于第二行的第一个字符

echo "read  line: $line "

echo "this is a  test line ">&3  (从左道右,依次覆盖第二行内容,根据输入 字符长度 覆盖 )

12.4.5  关闭文件描述符

创建的新的文件描述符,在shell 关闭时,会自动关闭,如需手动关闭,可以将他重定向到特殊符号  &- 

exec  3> testfile

echo "this is input">&3

exec 3>&-  (手动关闭 文件描述符)

12.5列出开放文件描述

使用  lsof 命令可以跟踪 文件描述符定位到哪个位置

-p  参数  可以指定进程 ID

-d  参数  可以指定要显示的文件描述符

-a  选项可以用来连接其他两个选项的结果

特殊环境 变量  $$ 代表当前进程 ID 

PS  /dev/pts/0    代表 标准输入终端

12.6  禁止命令输出

/dev/null  定位到该位置的数据都将丢失 且 不会保存,

ls  -al  >/dev/null  

12.7 创建临时文件

12.7.1 创建本地临时文件

默认情况下,mktemp 在本地目录创建临时文件,文件名  (文本文件名+6个X)

mktemp  命令使用  一个6个字符 代替 6个X ,以确保文件名在字符中唯一,

tempfile=`mktemp test19.XXXXXX`

exec 3>$tempfile

echo "this  scripts  write  to temp file  $tempfile"

echo "congdingxiang ">&3

echo "done the  temp  file  conents is  :"

cat   $tempfile

rm -f $tempfile 2>/dev/null

12.7.2  在/temp中创建临时文件

-t   命令 强制 mktemp 命令,在 /temp  中创建临时文件

mktemp  返回文件的  完整路径

12.7.3  创建临时目录

-d  选项让 mktemp  命令创建一个 临时目录 ,而不是临时文件

12.8   记录消息

如将消息同时发送到监视器 和 日志文件,需要 tee  命令,他讲STDIN的数据同时发送到

STDOUT 和 tee 命令指定的文件

MySQL自动化安装脚本   https://blog.csdn.net/qq_35209838/article/details/89520236

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值