LINUX入门:Linux Shell脚本中read、重定向和文件句柄和进程数目控制
| 
                         《LINUX入门:Linux Shell脚本中read、重定向和文件句柄和进程数目控制》要点: Linux Shell脚本中read、重定向和文件句柄和进程数目控制 1、把重定向作为read的输入 read可以从尺度输入读取一行,下面就使用read配合重定向把文件作为read的标注输入. #!/bin/bash 
#name:  links.sh 
#Revision:  1.1 
#Date:    2017// 
#Author:   linuxidc 
#Email:   memeda@163.com 
#Website:   
#Description:Printtheip-links 
#Notes:    
#------------------------------------------------------------------------------- 
#Copyright: 2017(c)linuxidc 
#License:  GPL 
# 
whilereadline;do
  echo"line=$line"
  sleep2 
done</home/linuxidc/model.txt    #把文件作为read的的输入 
unsetline
接下来运行一下 root@linuxidc:/home/yemo#bash file_des.sh 
line=#!/bin/bash 
line=#name:  links.sh 
line=#Revision:  1.1 
line=#Date:    2017/6/ 
line=#Author:   linuxidc 
line=#Email:   memeda@163.com 
line=#Website: 
line=#Description:Printtheip-links 
line=#Notes: 
line=#-------------------------------------------------------------------------------
输出了我的bash头部模板文件的内容 2、再话文件描述符 文件在打开时候系统给每一个打开的文件分配用于维护的描述符,这通常包含系统打开文件描述符表,进程级的文件描述符表(文件操作符标志和文件句柄的引用),文件系统i-node表.   基本用法 execfd<>file        #创立一个文件句柄                  
execfd>&- or exec-fd<&  #关闭文件句柄
创立文件描述符后在/proc/PID/fd中新建,通过$$查看当前shell的PID. root@linuxidc:/home/yemo#cd/proc/$$/fd           
root@linuxidc:/proc/6833/fd#ls 
0 1 2 255
给文件/home/linuxidc/model.txt创立一个描述符fd6 root@linuxidc:/proc/6833/fd#exec6<>/home/linuxidc/model.txt 
root@linuxidc:/proc/6833/fd#ls 
0 1 2 255 6
打开fd6,查看内容 root@linuxidc:/proc/6833/fd#cat6 
#!/bin/bash 
#name:  links.sh 
#Revision:  1.1 
#后面挺长就省略了,这不是重点
我们可以通过fd6,读写文件model.txt root@linuxidc:/proc/6833/fd#echo"hellogirl">>6 
root@linuxidc:/proc/6833/fd#tail-16 
hellogirl
如果删除文件,fd6会怎么样呢 root@linuxidc:/proc/6833/fd#stat-c%i/home/linuxidc/model.txt #先查看下inode 
128531 
root@linuxidc:/proc/6833/fd#stat-c%i6 
49938 
root@linuxidc:/proc/6833/fd#rm/home/linuxidc/model.txt 
root@linuxidc:/proc/6833/fd#ls 
0 1 2 255 6
fd6显示成红色,表现文件已经不存在了,我们打开一下 root@linuxidc:/proc/6833/fd#cat6 
#!/bin/bash 
#name:  links.sh 
#Revision:  1.1 
#此处省略很多行 
hellogirl
依旧可以打开,文件的删除只是删除的上级目录的存在的一个文件名,当文件在使用时候,并不会释放inode,只要block的数据没被覆盖都可以找回来,这里文件不大直接打开fd6重定向回去就好. 3、通过fd把文件内容传给read root@linuxidc:/proc/6833/fd#exec6>&-      #关闭文件句柄 
root@linuxidc:/proc/6833/fd#ls 
0 1 2 255
新建脚本测试一下 使用-u选项: -u fdread from file descriptor FD instead of the standard input #!/bin/bash 
#filename:  file_des.sh 
#Revision:  1.1 
#Date:    2017-06-09 
#Author:   linuxidc 
#Email:   memeda@163.com 
#QQ:   787743742 
#Website:   
#Description: 
#Notes:    
#------------------------------------------------------------------------------- 
#Copyright: 2017(c)linuxidc 
#License:  GPL 
exec6<>/home/linuxidc/model.txt           #创建文件句柄(fd6) 
whileread-u6line;do         #循环读取文件 
  echo"line=$line"
  sleep2 
done
exec6>&-             #文件用完,关闭文件句柄 
unsetline            #自定义变量,结束释放
                        (编辑:莱芜站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!  | 
                  
