= shell 裡 for ... in 與 運算 的應用 = * example 1 : 批次殺程序 {{{ #!/bin/bash # 把全部apache且start的pid放到變數$str內,若apache的pid 為1011 1012 1013,則$str=1011 1012 1013 str=$(ps axw -eo pid,command |\ grep "apache" | grep "start" |\ awk '{print $1}') # 雖然kill 支援一次刪除多個檔,如kill -9 1011 1012 1013,但若想要砍一個就喊一下的話,就要用到for...in的應用 count=1 for i in $str do echo "string[$count]= $i" echo "kill -9 $i" # 注意shell裡的運算要用$((n+n)),而$(...)的用法與`...`相同 count=$(($count+1)) done }}} * example 2 : 批次改檔名 {{{ cd ~ for i in *.[tT][iI][fF]; do #若目錄內無 .tif 檔案 $i 會傳回 "*.[tT][iI][fF]" if [ "$i" != "*.[tT][iI][fF]" ]; then #取得副檔名 subname="`echo $i | awk -F '.' '{print $NF}'`" #取得主檔名 filename="`echo $i | sed -e s/\.${subname}$//`" #將 .tif 轉成 .pdf #tiff2pdf -o "${filename}.pdf" "$i" mv ${filename}.tif ${filename}.pdf #若執行成功則刪除 .tif 檔案 if [ $? -eq 0 ]; then rm -rf $i fi fi done }}} = shell 裡 變數的關係 = || 系統變數 || env || env - STR=aaa || || 程序內的全域變數 || export || export STR=aaa || || 程序內的區域變數 || 直接設定 || STR=aaa || 參考 [http://linux.vbird.org/linux_basic/0320bash.php 認識與學習 BASH ]