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

Bash脚本-有人可以校对并解释为什么它是错误的吗,bash,ubuntu,if-statement,Bash,Ubuntu,If Statement,这是我写的第一个剧本,我正在寻求帮助。我找不到一个像我正在尝试编写的脚本,它变得很麻烦,因为我希望在这样的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.

这是我写的第一个剧本,我正在寻求帮助。我找不到一个像我正在尝试编写的脚本,它变得很麻烦,因为我希望在这样的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

我们打两条线吧……足够让我们忙的了

read  $COM1 start stop restart

if ["$COM1" = "start"]:  then
第一行读入一个变量,该变量的名称存储在
$COM1
中(该变量未初始化,因此实际上它是空的,所以它根本不做任何事情),再加上三个变量
start
stop
,和
restart
。您需要:

read COM1 start stop restart
或者您需要在使用前初始化
COM1

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

  • test
    命令,也称为
    [
    ,是一个命令名,而不是一个符号。因此,它需要与其参数分开。请注意,通常有一个命令
    /bin/[
    /usr/bin/[
    ,尽管现在它也是一个内置的shell
  • 幸运的是,由于
    $COM1
    未设置且为空,因此它已经被分离,但更多的是出于偶然而非设计
  • 因此,执行
    [
    命令时有3个参数:
    =
    ]:
    然后
    。这不是对
    [
    的有效调用。最后一个参数本身应该是
    ]
  • 您应该使用分号将
    ]
    分隔开来,然后
  • 总之,你应该写:

    if [ "$COM1" = "start" ]
    then
    
    或者您可以添加分号(不必用空格将其与
    ]
    隔开),然后添加
    然后

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

    在风格上,字符串“
    Minecraft Server LTG Bukkit 1.4.7
    ”到处重复;不要!使用变量来保存它


    担心你的嵌入式光标控制序列;不同的终端有不同的序列,因此你只能使用一种终端类型。解决这一问题比较困难;研究
    tput
    命令。

    让我们看两行……足够让我们忙的了

    read  $COM1 start stop restart
    
    if ["$COM1" = "start"]:  then
    
    第一行读入一个变量,该变量的名称存储在
    $COM1
    中(该变量未初始化,因此实际上它是空的,所以它根本不做任何事情),再加上三个变量
    start
    stop
    restart
    。您需要:

    read COM1 start stop restart
    
    或者您需要在使用前初始化
    COM1

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

  • test
    命令,也称为
    [
    ,是一个命令名,而不是一个符号。因此,它需要与其参数分开。请注意,通常有一个命令
    /bin/[
    /usr/bin/[
    ,尽管现在它也是一个内置的shell
  • 幸运的是,由于
    $COM1
    未设置且为空,因此它已经被分离,但更多的是出于偶然而非设计
  • 因此,执行
    [
    命令时有3个参数:
    =
    ]:
    然后
    。这不是对
    [
    的有效调用。最后一个参数本身应该是
    ]
  • 您应该使用分号将
    ]
    分隔开来,然后
  • 总之,你应该写:

    if [ "$COM1" = "start" ]
    then
    
    或者您可以添加分号(不必用空格将其与
    ]
    隔开),然后添加
    然后

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

    在风格上,字符串“
    Minecraft Server LTG Bukkit 1.4.7
    ”到处重复;不要!使用变量来保存它


    担心你的嵌入式光标控制序列;不同的终端有不同的序列,所以你只能使用单一的终端类型。解决这一问题比较困难;研究
    tput
    命令。

    好吧,这就是我最后得到的结果-它是有效的,但我想知道是否有办法改善这种灾难 我真的很感激你的回答:)


    好吧,这就是我的结局——它是有效的,但我想知道是否有办法改善这样的灾难 我真的很感激你的回答:)


    在没有听到症状的情况下不可以。为什么不在执行过程中显示所面临的错误。如果条件错误,请补正前两个错误。如果条件不正确,请补正前两个错误。如果条件错误,请补正前两个错误。为什么不:
    NAME=“Minecraft Server LTG Bukkit 1.4.7”
    N1=“LTG Minecraft Server”
    。结果相同;代码更简单。为什么不:
    NAME=“Minecraft Server LTG Bukkit 1.4.7”
    N1=“LTG Minecraft Server”
    。结果相同;代码更简单。