Т他是我写的第一个脚本,我正在寻求一些帮助。我找不到像我正在尝试编写的脚本,它成为一个麻烦,因为我希望创建更多/扩展这样的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
发布于 2013-01-22 15:30:13
让我们看两行……那里有足够的东西让我们忙碌。
read $COM1 start stop restart
if ["$COM1" = "start"]: then
第一行读取一个变量,该变量的名称存储在$COM1
(未初始化,因此实际上它是空的,所以它不会做任何事情)中,外加三个变量start
、stop
和restart
。您需要:
read COM1 start stop restart
或者您需要在使用COM1
之前对其进行初始化。
第二行遇到了数量惊人的问题。
test
命令,又名[
,是一个命令名,而不是一个符号。因此,它需要与它的参数分开。请注意,通常有一个命令/bin/[
或/usr/bin/[
,尽管它也是一个内置在这些design.[
是未设置和空的,它已经被分隔,但更多的是偶然的,你的[
命令是用3个参数执行的:=
,]:
和then
。这不是有效的[
调用。最后一个参数本身应该是]
。]
和总的来说,你应该写下:
if [ "$COM1" = "start" ]
then
或者,您可以添加分号(不必与]
之间用空格分隔),然后添加then
if [ "$COM1" = "start" ]; then
在风格上,你到处都是重复的字符串'Minecraft Server LTG Bukkit 1.4.7
‘;不要这样!使用一个变量来保存它。
担心您的嵌入式光标控制序列;不同的终端具有不同的序列,因此您只能使用单一的终端类型。修复起来比较困难;请研究tput
命令。
发布于 2013-01-23 13:15:41
好吧,这就是我最终得到的结果--它是有效的,但我想知道是否有方法来改善这样的灾难,我真的很感谢你的回应:)
#! /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
https://stackoverflow.com/questions/14453113
复制相似问题