http://blog.chinaunix.net/u/29289/showart_407859.html
read一次可以為多個變數賦值——但一次只能讀一行,比如:
#!/bin/bash IFS=: read aa bb cc < /etc/passwd echo $aa $bb $cc (註:預設shell是無法將/etc/passwd中那些以冒號分割的字串分割的,通過設定IFS可以實現這一點,詳情見本文底部) 我們將看到的結果是前兩個變數被賦予了正確的值,最後一個變數被賦予了檔案第一行剩下的所有值。(因為read一次只能讀一行) 而現實中如果一個檔案儲存了這樣一個電話本: 路人甲 13900000000 主角A 23320000 神秘人 12x0x0x0000 旁白 85600000 …… 如果我們要寫一個指令碼來實現該電話本的查詢,通常會這樣寫: #!/bin/bash while read name num do if [ $name = $1 ] then echo $num fi done 當我們把想查詢的人名作為參數來啟動指令碼,就可以看到他的號碼,然後給他打騷擾電話…… (關於while等流程式控制制語句,我會在稍後整理) 抽取行 head -x 檔案 //抽取前x行 tail -x 檔案 //抽取末尾x行 sed -n xp 檔案 //抽取檔案中的第x行 註:這裡的-n就是-n,不代表別的。 抽取列 cut -fx -dy 檔案 //以y作為分隔字元,抽取第x列 awk -Fy '{print $x}' 檔案 //以y作為分隔字元,抽取第x列 註:awk可以抽取多列,在指令中使用逗號分割,例: awk -F: '{print $3,$5}' /etc/passwd 將會抽取檔案中的第3列和第5列 排序 sort -ty +xn 檔案 //以y作為分隔字元,以第1+x列為基準排序 註:如果使用了該指令,則不能在同一語句內使用其它參數,如有需要,只能在管道中再sort一次,如: sort +4n /etc/fstab | sort -r 其它參數: n 對數字排序 d 對字母排序 M 對月份排序(諸如JAN,FEB....DEC之類) r 逆向 $IFS 很多時候我們並不需要指定分隔字元,因為$IFS預設包含了空格,\t和分行符號。 只有遇到其它分隔字元是我們才需要特別指定,比如$PATH和/etc/passwd中就是以冒號分割,遇到類似這種情況,我們才需要對$IFS進行指定。