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

标签 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.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/[ ,虽然它也是这些天内置的外壳。
  • 幸运的是,自从 $COM1是未定的和空的,它已经被分开了,但更多的是偶然而不是设计。
  • 因此,您的 [命令使用 3 个参数执行:= , ]:then .这不是对 [ 的有效调用.最后一个参数应该是 ]在其自己的。
  • 您应该使用分号分隔 ]来自 then .

  • 总的来说,你应该写:
    if [ "$COM1" = "start" ]
    then
    

    或者您可以添加一个分号(不必与 ] 用空格分隔),然后是 then :
    if [ "$COM1" = "start" ]; then
    

    从风格上讲,你有字符串 ' Minecraft Server LTG Bukkit 1.4.7 ' 到处重复;不!使用变量来保存它。

    担心您的嵌入式光标控制序列;不同的终端有不同的序列,因此您仅限于单一终端类型。修复更难;调查tput命令。

    关于Bash 脚本 - 有人可以校对并解释为什么它是错误的,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14453113/

    相关文章:

    mysql - 在 Ubuntu 16.04 上重新安装 MySQL 5.7 服务器的问题

    php - Shell Cron 错误 - 什么可能导致此错误?

    php - 用 PHP 中的逻辑表达式替换 IF

    bash - awk 比较两个文件 - 从第一个文件的条件中删除第二个文件的行

    arrays - Bash-SSH到关联数组中的主机

    linux - Bash,如何检查变量中的控制字符(不可打印字符)?

    MySQL : updating a table from another table by leftjoin vs iterating

    c - 在 make 文件中包含输入语句和条件

    在没有 if 语句的情况下,当计数器达到某个值时调用函数

    c++ - 条件 c++ 的奇怪行为