注意了使用此腳本最好先把GMSV SAAC 等的服務端程序都徹底關閉,否則後果自負
此腳本適合檢查目前所有服務端的人物數據
Copy code
#!/bin/sh
#本腳本用於檢查石器服務端人物數據
help()
{
echo "腳本參數如下:"
echo "-h 幫助?"
echo "-d 數據字段例如:memberpoint(會員點字段)"
echo "-s 文件夾路徑"
echo "-c 運算符號 = < >"
echo "-l 邏輯運算符 & | !"
echo "-e 2次運算符號 = < >"
echo "-nc 行數運算符號 = < >"
echo "-num 判斷結果的數量 =\>\<\數值"
echo "-t 文件種類如果想搜索所有文件請設置* 只單獨搜索某一文件可以.char .item .pet都可以"
echo "-n 內容"
echo "-en 內容2"
echo "例子:./finddata -d memberpoint -c '>' -n 100"
echo "搜索memberpoint>100的玩家數據並顯示文件路徑"
}
strp=./
while [ -n "$1" ]; do
case $1 in
-h) help;shift 1;;
-s) strp=$2;shift 2;;
-d) jzdata=$2;shift 2;;
-c) jzc=$2;shift 2;;
-l) jzl=$2;shift 2;;
-e) jze=$2;shift 2;;
-nc)jznc=$2;shift 2;;
-num)num=$2;shift 2;;
-t) jzt=$2;shift 2;;
-n) jznum=$2;shift 2;;
-en)jzenum=$2;shift 2;;
-*) echo "錯誤的參數 -h尋求幫助";exit 1;;
*) break;;
esac
done
case $jzc in
'=') numif=1;;
'<') numif=2;;
'>') numif=3;;
*) numif=4;;
esac
case $jzl in
'&') ifstr=並且;;
'|') ifstr=或者;;
'!') ifstr=不等於;;
esac
numif1=`expr $numif ">" 0`
if [ "$numif1" = "1" ]; then
numif1=`expr $numif "<" 4`
if [ "$numif1" = "1" ]; then
echo "開始搜查 $strp 目錄下"
if [ -n "$ifstr" ]; then
echo "$jzdata $jzc $jznum $ifstr $jzdata $jze $jzenum 的人物數據內容"
else
echo "$jzdata $jzc $jznum 的人物數據內容"
fi
jzcnum=0
charpath=`find $strp -name "*${jzt}"`
for charpath1 in ${charpath}
do
num1=0
num2=0
chardata=`grep "${jzdata}" $charpath1 | \
sed -e "s/${jzdata}=/\n/g" | cut -b 1-20 | \
sed -e "s/|/,/g" -e 's/\\\n/,/g' -e 's/\\\z/,/g' | \
awk -F, '{print $1}'`
if [ -n "$chardata" ]; then
charname=`echo "$chardata" | head -1`
for charnumtemp in ${chardata}
do
numtemp2=`expr $numtemp2 "+" 1`
numtemp1=`expr $numtemp2 ">" 1`
charstrtemp=`echo "$charpath1" | grep '*.item'`
if [ -n "$charstrtemp" ]; then
charstrtemp=`echo "$charnumtemp"|grep "Depotitem*"`
fi
if [ -n "$charstrtemp" ]; then
charstrtemp=
else
if [ "$numtemp1" = "1" ]; then
numif1=`expr $charnumtemp "$jzc" $jznum`
if [ "$numif1" = "1" ]; then
chardata1=`echo "$charnumtemp"`
num1=`expr $num1 "+" 1`
fi
if [ -n "$jze" ]; then
if [ -n "$jzl" ]; then
numif2=`expr $charnumtemp "$jze" $jzenum`
numif1=`expr $numif1 "$jzl" $numif2`
if [ "$numif1" = "1" ]; then
chardata=`echo "$charnumtemp"`
num2=`expr $num2 "+" 1`
fi
fi
fi
fi
fi
done
charnumtemp=`echo "當前人物字段數據為:"`
if [ -n "$num" ]; then
if [ -n "$jzl" ]; then
if [ -n "$num2" ]; then
numif1=`expr $num2 "$jznc" $num`
fi
else
if [ -n "$num1" ]; then
numif1=`expr $num1 "$jznc" $num`
chardata=`echo "$chardata1"`
fi
fi
else
if [ -n "$jzl" ]; then
if [ -n "$num1" ]; then
numif1=`expr $num1 ">=" 1`
fi
else
if [ -n "$num1" ]; then
numif1=`expr $num1 ">=" 1`
chardata=`echo "$chardata1"`
fi
fi
fi
if [ "$numif1" = "1" ]; then
jzcnum=`expr $jzcnum "+" 1`
echo "符合條件的人物數據文件:$charpath1" #>>文件名(擴展功能可以把信息輸出到文件)
echo "人物名:$charname 要查找的字段:${jzdata} ${charnumtemp}${chardata}" #>>文件名(擴展功能可以把信息輸出到文件)
fi
fi
done
numif1=`expr $jzcnum ">" 0`
if [ "$numif1" = "1" ]; then
echo "共搜索到:$jzcnum 條數據"
else
echo "沒有搜索到數據"
fi
fi
fi
exit 1
創建一個finddata的文件然後輸入上面的內容注意文件格式為unix
./finddata -d memberpoint -c '>' -n 10 -s /sa80/saac/char/
此參數啟動腳本就是查找會員點>10的人物數據,如果想查其他數據可以改一下腳本參數.
./finddata -d =id -c '>' -n 19775 -e '<' -en 19781 -l '&' -nc '>' -num 0 -t '*' -s /sa80/saac/char
此參數啟動腳本就是檢查擁有19776-19780道具的人物數據 -nc '>' -num 0 這個意思是擁有的數量>0
[ 此貼被[嚇人組]吉仔在2007-05-26 16:16重新編輯 ]
如果想單獨查某一個道具可以忽略掉2次運算的相關幾個參數
例如./finddata -d =id -c '=' -n 19778 -nc '>' -num 0 -t '*' -s /sa80/saac/char
-t是文件類型*代表所有文件也可以設置成 .item 只檢查道具倉庫 .char 只檢查人物數據
沒有留言:
張貼留言