首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Bash脚本-有人可以校对并解释为什么它是错误的吗?

Bash脚本-有人可以校对并解释为什么它是错误的吗?
EN

Stack Overflow用户
提问于 2013-01-22 14:53:58
回答 2查看 280关注 0票数 0

Т他是我写的第一个脚本,我正在寻求一些帮助。我找不到像我正在尝试编写的脚本,它成为一个麻烦,因为我希望创建更多/扩展这样的bash结构。

如果有人有时间,可以帮我校对一下吗?有人能告诉我我做错了什么吗?为什么?

代码语言:javascript
运行
复制
#! /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
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-01-22 15:30:13

让我们看两行……那里有足够的东西让我们忙碌。

代码语言:javascript
运行
复制
read  $COM1 start stop restart

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

第一行读取一个变量,该变量的名称存储在$COM1 (未初始化,因此实际上它是空的,所以它不会做任何事情)中,外加三个变量startstoprestart。您需要:

代码语言:javascript
运行
复制
read COM1 start stop restart

或者您需要在使用COM1之前对其进行初始化。

第二行遇到了数量惊人的问题。

  1. test命令,又名[,是一个命令名,而不是一个符号。因此,它需要与它的参数分开。请注意,通常有一个命令/bin/[/usr/bin/[,尽管它也是一个内置在这些design.
  2. Because中的外壳程序,因为[是未设置和空的,它已经被分隔,但更多的是偶然的,你的[命令是用3个参数执行的:=]:then。这不是有效的[调用。最后一个参数本身应该是]
  3. 您应该使用分号来分隔]

总的来说,你应该写下:

代码语言:javascript
运行
复制
if [ "$COM1" = "start" ]
then

或者,您可以添加分号(不必与]之间用空格分隔),然后添加then

代码语言:javascript
运行
复制
if [ "$COM1" = "start" ]; then

在风格上,你到处都是重复的字符串'Minecraft Server LTG Bukkit 1.4.7‘;不要这样!使用一个变量来保存它。

担心您的嵌入式光标控制序列;不同的终端具有不同的序列,因此您只能使用单一的终端类型。修复起来比较困难;请研究tput命令。

票数 3
EN

Stack Overflow用户

发布于 2013-01-23 13:15:41

好吧,这就是我最终得到的结果--它是有效的,但我想知道是否有方法来改善这样的灾难,我真的很感谢你的回应:)

代码语言:javascript
运行
复制
#! /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
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14453113

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档