wiki:waue/2009/0707

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

參考 認識與學習 BASH

Last modified 15 years ago Last modified on Jul 7, 2009, 3:15:33 PM