碼迷,www.tparu.icu
吉利平特名人堂 > 系統相關 > 詳細

暗香暗香平特网:shell初級-----數據呈現方式

時間:2019-05-23 18:19:20      閱讀:37      評論:0      收藏:0      [點我收藏+]

吉利平特名人堂 www.tparu.icu 標簽:bsp   tmp目錄   引用   保存   描述符   std   src   enter   命令行   

輸入與輸出

Linux系統將每個對象當作文件處理,這包括輸入和輸出進程。
Linux用文件描述符來標識每個文件對象。
文件描述符是一個非負整數,可以唯一標識會話中打開的文件。
每個進程一次多可以有九個文件描述符。出于特殊目的,bash shell保留了前三個文件描述符(0、1和2)

技術圖片

 

 

 

這三個特殊文件描述符會處理腳本的輸入和輸出。

1、stdin

STDIN文件描述符代表shell的標準輸入
在使用輸入重定向符號(<)時,Linux會用重定向指定的文件來替換標準輸入文件描述符。 它會讀取文件并提取數據,就如同它是鍵盤上鍵入的。

[[email protected] ljy]# cat < one.txt 
one
two
three

2、stdout

STDOUT文件描述符代表shell的標準輸出

[[email protected] ljy]# date > time.txt
[[email protected] ljy]# more time.txt 
2019年 05月 16日 星期四 10:08:51 CST
[[email protected] ljy]# date >> time.txt   #>>表示追加的意思
[[email protected] ljy]# more time.txt   
2019年 05月 16日 星期四 10:08:51 CST
2019年 05月 16日 星期四 10:09:01 CST

3、stderr

shell通過特殊的STDERR文件描述符來處理錯誤消息。

默認情況下,錯誤消息也會輸出到顯示器輸出中。

[[email protected] ljy]# aaaa 2> err.txt       
[[email protected] ljy]# more err.txt 
-bash: aaaa: 未找到命令

#shell會只定向錯誤消息而非普通的數據。

如果想要同時定義普通與錯誤的消息可以用兩個重定向符的方式:

[[email protected] ljy]# ls -al one two 2> err.txt 1> normal.txt
[[email protected] ljy]# more err.txt 
ls: 無法訪問two: 沒有那個文件或目錄
[[email protected] ljy]# more normal.txt 
-rw-r--r-- 1 root root 0 5月  16 10:17 one

bash也提供了特殊的重定向符實現這一個效果&>。

[[email protected] ljy]# ls -al one two &> ceshi.txt            
[[email protected] ljy]# more ceshi.txt 
ls: 無法訪問two: 沒有那個文件或目錄
-rw-r--r-- 1 root root 0 5月  16 10:17 one
#生成的所有輸出都會到同一位置,包括普通與錯誤。默認錯誤消息會處于更高的優先級,方便查看。

腳本中重定向輸出

 1、臨時重定向

希望在腳本中生成錯誤的信息的話,可以單獨的一行輸出重定向到STDERR。重定向到文件描述時,你必須在文件描述符數字前加一個&符號。

[[email protected] ljy]# more one.sh 
#!/bin/bash
echo "this is a error message!" >&2
echo "this is a normal message!"
[[email protected] ljy]# sh one.sh 
this is a error message!
this is a normal message!
[[email protected] ljy]# sh one.sh 2> err.log
this is a normal message!
[[email protected] ljy]# more err.log 
this is a error message!

默認情況下,Linux會將STDERR導向STDOUT,但是運行腳本時重定向了STDERR,腳本中所有導向STDERR的都會被重新導向。

2、永久重定向

如果腳本中有大量數據需要重定向,可以使用exec命令告訴shell在腳本執行期間重定向某個特定文件描述符。

[[email protected] ljy]# more one.sh 
#!/bin/bash
exec 1> normal.txt
exec 2> err.txt
echo "this is a error message!" >&2
echo "this is a normal message!"
[[email protected] ljy]# 
[[email protected] ljy]# sh one.sh 
[[email protected] ljy]# ls
err.txt  normal.txt  one.sh
[[email protected] ljy]# more err.txt 
this is a error message!
[[email protected] ljy]# more normal.txt 
this is a normal message!

腳本中重定向輸入

exec命令允許你將STDIN重定向到linux文件中

[[email protected] ljy]# more test   
one 
two
three
[[email protected] ljy]# more ceshi.sh 
#!/bin/bash
exec 0< test
count=1
while read line
do  
  echo "$count:$line"
  count=$[$count + 1]
done
[[email protected] ljy]# sh ceshi.sh 
1:one
2:two
3:three

阻止命令輸出

shell輸出到null文件的任何命令都不會被保存!

在Linux系統中null的標準位置是/dev/null,你重定向到該位置的文件都會被丟掉不會顯示。

[[email protected] ljy]# ls -al > /dev/null 
[[email protected] ljy]# more /dev/null 

也可以將/dev/null作為輸入文件,可以用它來快速清空現有文件的數據,而不需要刪除后重新創建。

[[email protected] ljy]# more test 
one 
two
three
[[email protected] ljy]# cat /dev/null > test 
[[email protected] ljy]# more test

創建臨時文件

系統上的任何賬戶都有權限讀寫/tmp目錄中的文件

mktemp可以在本地目錄中創建一個臨時文件,需要制定一個文件名,末尾需要設置6個X

[[email protected] tmp]$ mktemp ceshi.XXXXXX
ceshi.vyBZEx

-t選項會強制mktemp命令在系統的臨時目錄創建文件。

由于mktemp命令返回來了全路徑名,你可以在Linux系統的任何目錄下引用該臨時文件,不需要管目錄在哪。

[[email protected] /]$ mktemp -t ceshi.XXXXXX
/tmp/ceshi.eSU3MD

-d選項告訴mktemp命令來創建一個臨時目錄而不是一個文件。

[[email protected] tmp]$ mktemp -d ceshi.XXXXXX
ceshi.9JVceD

記錄消息

tee命令相當于管道的一個T型接頭。他將從STDIN過來的數據同時發往兩處,一處是STDOUT,另一處是tee命令行所指定的文件名。

[[email protected] ljy]# date | tee ceshi
2019年 05月 16日 星期四 13:57:40 CST
[[email protected] ljy]# more ceshi
2019年 05月 16日 星期四 13:57:40 CST

tee命令會在每次使用時覆蓋輸出內容,如果你想要追加,必須使用-a參數。

shell初級-----數據呈現方式

標簽:bsp   tmp目錄   引用   保存   描述符   std   src   enter   命令行   

原文地址:https://www.cnblogs.com/jinyuanliu/p/10913521.html

(0)
(0)
   
舉報
評論 一句話評論(0
0條  
登錄后才能評論!
? 2014 吉利平特名人堂 版權所有 京ICP備13008772號-2
迷上了代碼!
幸运飞艇稳赚计划回血 金殿国际棋牌 体彩体验券怎么用 欢乐麻将二人雀神过胡 时时彩走势图 玩pk10有人赢钱吗 pk10飞艇全天免费计划 3d1胆拖7码直选多少钱 欢乐二八杠完美作弊器下载 重庆时时彩正不正规 赛车pk10走势图 刘伯温金牌六肖资料 石柯 pk10人工1期计划在线 彩票11选5任五9码稳赚 大小单双怎么猜能中