0

Тhisは私が今までに書いた最初のスクリプトであり、私はいくつかの助けを探しています。このようなbash構造をさらに作成/拡張したいので、作成しようとしているようなスクリプトが見つからず、面倒になります。

時間があれば、私のためにこれを校正してくれるかもしれません。誰かが私が間違っていることとその理由を教えてもらえますか?

#! /bin/bash
#  script to turn the screen blue
echo -e '\033[1;32m'
echo "Minecraft Server LTG Bukkit 1.4.7"
echo "Minecraft Server LTG Bukkit 1.4.7"
echo -e '\033[31m' "[Start  ] \033[1;32m LTG MineCraft Server"
echo -e '\033[31m' "[Stop   ] \033[1;32m LTG MineCraft Server"
echo -e '\033[31m' "[Restart] \033[1;32m LTG MineCraft Server"
echo -e '\033[0m'
cho -e "Hello, \033[47m \033[30m"$USER" \033[0m Enter Command:"

echo  "Command:"
read  $COM1 start stop restart

if ["$COM1" = "start"]:  then
       echo "ran minecraft serv"
     if [ "$(pgrep -g java -Xmx256M -Xms256M -jar /minecraft/minecraft_server.jar)" ] ; then
       echo MineCraft Server Bukkit 1.4.7 L.T.G : Running

     else
       echo -e "\033[1;32m MineCraft Server Bukkit 1.4.7 L.T.G : \033[31m  FAILED \033[0m"
     fi
if ["$COM1" "stop"]: then
    echo -e "\033[1;32m  MineCraft Server Bukkit 1.4.7 L.T.G : Shutting Down \033[0m"
    killall java
     if (( "$(pgrep -g java -Xmx256M -Xms256M -jar /minecraft/minecraft_server.jar)" )) ; then
    killall java
    echo -e "\033[1;32m MineCraft Server Bukkit 1.4.7 L.T.G: is SHUTDOWN \033[0m"
     fi
if [ "$COM1"  "Restart" ] ; then
     echo MineCraft Server Bukkit 1.4.7 L.T.G : Rebooting
     exit 1
 fi
fi
exit 0
4

2 に答える 2

3

2行取りましょう...私たちを忙しくさせるのに十分です。

read  $COM1 start stop restart

if ["$COM1" = "start"]:  then

最初の行は、名前が格納されている変数$COM1(初期化されていないため、実際には空であるため、結局何も実行されません)に加えて、3つの変数、、、およびをstart読み込みstopますrestart。次のいずれかが必要です。

read COM1 start stop restart

または、COM1使用する前に初期化する必要があります。

2行目は、驚くほど多くの問題に遭遇しました。

  1. コマンド(test別名[)はコマンド名であり、シンボルではありません。そのため、引数から分離する必要があります。最近はシェルビルトインでもありますが、通常はコマンド/bin/[またはがあります。/usr/bin/[
  2. 幸いなことに、$COM1は設定されておらず空であるため、すでに分離されていますが、設計よりも偶然です。
  3. そのため、[コマンドは3つの引数(、、および)を使用して実行さ=]:ますthen。これは、の有効な呼び出しではありません[。最後の引数は]それ自体である必要があります。
  4. ]からを区切るには、セミコロンを使用する必要がありますthen

まとめると、次のように書く必要があります。

if [ "$COM1" = "start" ]
then

]または、セミコロン(スペースで区切る必要はありません)を追加してから、then:を追加できます。

if [ "$COM1" = "start" ]; then

様式的には、文字列' Minecraft Server LTG Bukkit 1.4.7'がいたるところに繰り返されています。しないでください!変数を使用して保持します。

埋め込まれたカーソル制御シーケンスについて心配します。異なる端末は異なるシーケンスを持っているため、単一の端末タイプに制限されます。それを修正するのは難しいです。コマンドを調べてtputください。

于 2013-01-22T07:30:12.740 に答える
0

さて、これは私が最終的に得たものです-それは機能しますが、私はそのような災害を改善する方法があるかどうか知りたいです私は本当に応答に感謝します:)

#! /bin/bash
#  script to turn the screen blue
NAME=$(echo Minecraft Server LTG Bukkit 1.4.7)
echo -e '\033[1;32m'
echo "$NAME"
echo "$NAME"
N1=$(echo LTG MineCraft Server)
echo -e '\033[31m' "[Start  ] \033[1;32m $N1"
echo -e '\033[31m' "[Stop   ] \033[1;32m $N1"
echo -e '\033[31m' "[Restart] \033[1;32m $N1"
echo -e '\033[0m'
echo -e "Hello \033[47m \033[30m"$USER" \033[0m Enter Command:"

echo  "Command:"
read test
#this is a test piece
echo "start = $test"

if [ $test == "start" ];  then
echo -e "\033[31m $NAME : Starting"
java -Xmx256M -Xms256M -jar /minecraft/minecraft_server.jar &>./minecraft.sh.rlog
  if [ "$(pgrep -g java -Xmx256M -Xms256M -jar /minecraft/minecraft_server.jar)" ] ; then
       echo -e "\033[31m $NAME : Running"
       exit 1
  else
    echo -e "\033[1;32m $NAME : \033[31m  FAILED \033[0m"
  fi
fi
if [ $test == "stop" ]; then
    echo -e "\033[1;32m $NAME : Shutting Down \033[0m"
        killall java &> ./minecraft.sh.log
        MINECRAFT=$(pgrep -g java -Xmx256M -Xms256M -jar /minecraft/minecraft_server.jar                             &>./minecraft.sh.log)
                sleep 1
                echo .
                sleep 1
                echo .
                sleep 1
                echo .
                sleep 1
                echo .
     if [[ -z "$MINECRAFT" ]] ; then
        killall java &> ./minecraft.sh.log
        echo -e "\033[1;32m $NAME : IS SHUTDOWN \033[0m"
     else
         #should never bee seen
        echo Something Went Wrong
     fi
fi
if [ $test == "restart" ] ; then
     echo -e "\033[31m $NAME : Rebooting \033[0m"
        kill java &>minecraft.sh.log
        sleep 1
 echo .
        sleep 1
        echo .
        if [[ -z "$MINECAFT" ]]; then
        echo -e "\033[1;32m $NAME : IS SHUTDOWN \033[0m"
        sleep 1
        echo .
        fi
        echo -e "\033[31m $NAME : Starting \033[0m"
        sleep 1
        echo .
         java -Xmx256M -Xms256M -jar /minecraft/minecraft_server.jar &> ./minecraft.sh.rlog
else
if [ $test == "exit" ] ; then
        exit 0
fi

exit 1
fi
于 2013-01-23T05:15:40.517 に答える