Bash脚本-有人可以校对并解释为什么它是错误的吗
这是我写的第一个剧本,我正在寻求帮助。我找不到一个像我正在尝试编写的脚本,它变得很麻烦,因为我希望在这样的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.
#! /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”
。结果相同;代码更简单。