shell腳本中的數據傳遞方式


shell中支持的數據傳遞方式 主要有那么幾種: 變量、管道、結果引用、重定向+文件、以及xargs。

 

變量方式:

 1. 定義變量: 變量名=值

 2. 使用變量: $變量名

 

管道方式:

統計當前文件夾下的文件數量:

find . | awk {print NR}
#打印99乘法表
seq 9 | sed 'H;g' | awk -v RS='' '{for(i=1;i<=NF;i++)printf("%dx%d=%d%s", i, NR, i*NR, i==NR?"\n":"\t")}'

 

結果引用:

#kill 某個process
kill -9 `ps | grep navi | awk 'NR==1 {print $1}'`

 

重定向方式:

簡單的: 將當前文件夾下的目錄文件信息寫入dir.log

ls -l > dir.log

 

復雜的:將make輸出寫入make.log文件

make -j8 > make.log 2>&1

shell中的2 和 1 分別代表 錯誤輸出 和 標准輸出, 0 代表 標准輸入。 而&類同與C語言中的取地址,上述中代表錯誤輸出2也重定向到標准輸出1的設備上。

如果你既想將輸出結果重定向到文件,同時也想看到腳本命令運行過程, 那么你可以使用tee命令。

tee命令接收管道傳遞過來的信息,將其保存到文件,同時也在屏幕上輸出。

#verbose output ; save output to iostat_1_10.log
iostat 1 10 | tee  iostat_1_10.log

 

xargs:

1. xargs是一個以空格分解字符串,並以分解后的字符串作為其后的命令的參數,並逐一啟動其后的cmd執行。

2. 它的作用是將參數列表轉換成小塊分段傳遞給其他命令,以避免參數列表過長的問題.

3. xargs的作用一般等同於大多數Unix shell中的反引號,但更加靈活易用,並可以正確處理輸入中有空格等特殊字符的情況。對於經常產生大量輸出的命令如find、locate和grep來說非常有用。

例如: 你有一個文件包含了很多你希望下載的URL, 你能夠使用xargs 下載所有鏈接

cat url-list.txt | xargs wget –c

再如: 

find /path -type f -exec rm '{}' \;

可以替換為:

find /path -type f -print0 | xargs -0 rm

后者速度更快。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM