《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
#
while
read
line;
do
echo
"line=$line"
sleep
2
done
<
/home/linuxidc/model
.txt
#把文件作为read的的输入
unset
line
接下来运行一下
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表.
基本用法
exec
fd<>
file
#创立一个文件句柄
exec
fd>&- 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
exec
6<>
/home/linuxidc/model
.txt
#创建文件句柄(fd6)
while
read
-u6line;
do
#循环读取文件
echo
"line=$line"
sleep
2
done
exec
6>&-
#文件用完,关闭文件句柄
unset
line
#自定义变量,结束释放