wiki:waue/2009/0707

Version 2 (modified by waue, 15 years ago) (diff)

--

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