太習慣寫 php 了,其實也有一陣子用 php 當作 script 管機器,最近則是試過 python ,所以,就來試試 bash 吧!
首先會碰到的問題是如何處理參數,這部分可以在 Getopt and getopts 看到很豐富的範例,接下來還可以逛逛 鳥哥的 Linux 私房菜 - 第十三章、學習 Shell Scripts #善用判斷式 ,就可以完成很多事囉!接著我想做的字串取代,就可以使用 sed 來處理,相關參考資料 Bash Shell: Replace a string with another string in all files using sed and perl -pie
最後,留個範例給自己吧
#!/bin/bash
WORK_DIR=
OPTS_ENABLE="false"
usage_help()
{
echo "Usage> $0 -i \"Path\" ..."
echo " -i \"/tmp\" # path for write a config file"
}
args=`getopt i:e $*`
if test $? != 0
then
usage_help
exit 1
fi
set -- $args
for i do
case "$i" in
-i) shift; WORK_DIR=$1 ;shift;;
-e) shift; OPTS_ENABLE="true" ;shift;;
esac
done
# check install path
if test ! -r $WORK_DIR || test ! -x $WORK_DIR || test ! -w $WORK_DIR ; then
echo "Please Check WorkDir: [$WORK_DIR]"
exit 1
fi
FILE_CONFIG=$WORK_DIR/config
# bakcup & replace
if test -r $FILE_CONFIG ; then
cp $FILE_CONFIG $FILE_CONFIG.bak.`date +%Y%m%d%H%M%S`
sed -e "s/KEY/$OPTS_ENABLE/g" $FILE_CONFIG > $FILE_CONFIG
fi
其中,若存在 bash shell 裡的變數是帶有路徑的, ex: x=/path/bin.exe , 那使用 sed -e "s/KEY/$x/g" $FILE_CONFIG > $FILE_CONFIG 會出問題,解法就是先把 x 變數中的 '/' 取代成 '\/' 吧!
x=$(echo $x | sed "s/\//\\\\\//g")
沒有留言:
張貼留言