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
后者速度更快。