私はこれで完全に初心者です。 if elseif else チュートリアルをグーグルで検索し、このスクリプトの作成を開始しました。PHPスクリプトからバルブソースサーバーを管理するオプションを提供する.shスクリプトを作成しようとしています。これは私が現在持っているものです:
#!/bin/sh
# CONFIG
LOGFILE="/var/www/management/ifacelog"
NEWDATE=`TZ=GMT-3 date +%d.%m.%Y" "%H:%M:%S`
# END OF CONFIG
SCRIPTCOMMAND=$1
CSGOCOMMAND=$2
if [ $SCRIPTCOMMAND = "START" ] ; then
echo $NEWDATE "SERVER STARTED! connect cs.kask.fi; password gd | rcon_password tuksu" >> test
touch lockfile
screen -A -m -d -S csgo -L /home/csgo/server/srcds_run -game csgo -console -usercon -tickrate 128 +net_public_adr 46.246.93.192 +ip 46.246.93.192 +tv_port 27010 -maxplayers_override 11 +game_type 0 +game_mode 1 +host_worksh$
elif [ $SCRIPTCOMMAND = "RESTART" ] ; then
echo $NEWDATE "STOPPING THE SERVER" >> test
echo $NEWDATE "Passing command tv_stoprecord and waiting 10sec." >> test
screen -S csgo -X stuff "tv_stoprecord"
screen -S csgo -X stuff "
"
sleep 10
echo $NEWDATE "Passing command: quit" >> test
screen -S csgo -X stuff "quit"
screen -S csgo -X stuff "
"
echo $NEWDATE "SERVER RESTARTED!" >> test
elif [ $SCRIPTCOMMAND = "KILL" ]; then
echo $NEWDATE "KILLING SERVER!" >> test
pkill srcds_run
rm lockfile
rm screenlog.0
elif [ $SCRIPTCOMMAND = "RCON" ]; then
echo $NEWDATE "REMOTE RCON! Passing value: " $2 $3 >> test
screen -X -S csgo -p 0 stuff $2 $3
screen -S csgo -X stuff "
"
elif [ $SCRIPTCOMMAND = "RESET" ]; then
rm lockfile
rm screenlog.0
else
echo "UNKNOWN COMMAND WAS PASSED!"
fi
画面セッション自体にコマンドを渡すことを除いて、すべてが機能しています (scriptcommand = RCON の場合)。shell と入力screen -X -S csgo -p 0 stuff say test
すると、正しく screen セッションに渡されます。script を実行すると./csgo.sh RCON say test
、 screen に error と表示されます-X: stuff: invalid option "say"
。私も試してみましscreen -X -S csgo -p 0 stuff \"$2\"
たが、違いはありませんでした。
これは手動で入力すると問題なく機能するため、スクリプトで機能しない理由がわかりません。なぜそれが機能しないのか、それを修正する方法はありますか?