首頁 > 軟體

Linux Shell指令碼中read、重定向和檔案控制代碼和進程數目控制

2020-06-16 17:11:25

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: Print the ip-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: Print the ip-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# exec 6<>/home/linuxidc/model.txt
root@linuxidc:/proc/6833/fd# ls
0  1  2  255  6

開啟fd6,檢視內容

root@linuxidc:/proc/6833/fd# cat 6
#!/bin/bash
#name:     links.sh
# Revision:    1.1
#後面挺長就省略了,這不是重點

我們可以通過fd6,讀寫檔案model.txt

root@linuxidc:/proc/6833/fd# echo "hello girl" >>6
root@linuxidc:/proc/6833/fd# tail -1 6
hello girl

如果刪除檔案,fd6會怎麼樣呢

root@linuxidc:/proc/6833/fd# stat -c %i /home/linuxidc/model.txt   #先檢視下inode
128531
root@linuxidc:/proc/6833/fd# stat -c %i 6
49938
root@linuxidc:/proc/6833/fd# rm /home/linuxidc/model.txt 
root@linuxidc:/proc/6833/fd# ls
0  1  2  255  6

IT145.com E-mail:sddin#qq.com