bash скрипт не завершается корректно после ошибки EOF (ожидаем затем); - PullRequest
1 голос
/ 03 января 2012

Мой следующий скрипт выдает ошибку (он жалуется на ожидание ключевого слова then до выхода из файла. Я не могу найти ошибку. Пожалуйста, помогите, если у вас есть время.

Спасибо, Юкка

#!/bin/sh
#Makes the /usr/lib/jvm in case...
sudo mkdir -p /usr/lib/jvm;
sudo mkdir /org-thejarbar-work-dir;
cd /org-thejarbar-work-dir;

#Update this line to reflect newer versions of JDK...
wget http://download.oracle.com/otn-pub/java/jdk/7u1-b08/jdk-7u1-linux-i586.tar.gz;

#Extract the download
tar -xvf ./*gz;

#Move it to where it can be found...
sudo mv ./* /usr/lib/jvm/;
sudo ln -s /usr/lib/jvm/jdk1*/bin/java /usr/bin/;
sudo rm -rf /org-thejarbar-work-dir;

#Makes the /usr/lib/maven in case...
sudo mkdir -p /usr/lib/maven;
sudo mkdir /org-thejarbar-work-dir;
cd /org-thejarbar-work-dir;

#Update this line to reflect newer versions of maven
wget http://mirrors.powertech.no/www.apache.org/dist//maven/binaries/apache-maven-3.0.3-bin.tar.gz;
tar -xvf ./*gz;

#Move it to a more logical location
sudo mv ./* /usr/lib/maven/;

#If you have Maven on Windows and use VirtualBox, you can set up the maven to be a virtualbox shared folder.
#The name must match the name used below (ignore if irrelevant to you).
sudo mount -t vboxsf maven /usr/lib/maven;

#Link the new Maven to the bin...
sudo ln -s /usr/lib/maven/apache-maven-*/bin/mvn /usr/bin/;
sudo rm -rf /org-thejarbar-work-dir;
sudo mkdir /org-thejarbar-work-dir;
cd /org-thejarbar-work-dir;

#Update this line to reflect newer versions of Netbeans or replace 'javase' with 'javaee' or add Java EE manually via
#Netbeans 'plugins as needed.
wget http://download.netbeans.org/netbeans/7.0.1/final/bundles/netbeans-7.0.1-ml-javase-linux.sh;
sh //*sh;
sudo mv ./* /usr/lib/ide/;

#Add Netbeans launcher to your PATH. Doing so allows you to run 'netbeans' command from the terminal
sudo ln -s /usr/lib/ide/netbeans-7*/bin/netbeans /usr/bin/;

#If you use VirtualBox , you can share your projects between Host and guest. Name of shared
#folder must match 'NetBeansProjects' Remove this if you don't need...
if [ ! -d "~/NetBeansProjects" ]; then
    sudo mkdir ~/NetBeansProjects;
fi

sudo mount -t vboxsf NetBeansProjects ~/NetBeansProjects;
sudo rm -rf /org-thejarbar-work-dir;
sudo mkdir /org-thejarbar-work-dir;
cd /org-thejarbar-work-dir;

#Update this line to reflect newer versions of Netbeans or replace 'javase' with 'javaee' or add Java EE manually via
#Netbeans 'plugins as needed.
wget http://download.netbeans.org/netbeans/7.0.1/final/bundles/netbeans-7.0.1-ml-javase-linux.sh;
sh //*sh;
sudo mv ./* /usr/lib/ide/;

#Add Netbeans launcher to your PATH. Doing so allows you to run 'netbeans' command from the terminal
sudo ln -s /usr/lib/ide/netbeans-7*/bin/netbeans /usr/bin/;

#If you use VirtualBox , you can share your projects between Host and guest. Name of shared
#folder must match 'NetBeansProjects' Remove this if you don't need...
if [ ! -d "~/NetBeansProjects" ]; then
    sudo mkdir ~/NetBeansProjects;
fi

sudo mount -t vboxsf NetBeansProjects ~/NetBeansProjects;
sudo rm -rf /org-thejarbar-work-dir;
sudo mkdir /org-thejarbar-work-dir;
cd /org-thejarbar-work-dir;
sudo wget http://download-ln.jetbrains.com/idea/ideaIC-11.tar.gz
sudo tar -zxvf ./*.gz;

#Move it to a better location...
sudo rm -rf /usr/lib/ide/idea-IC*;
sudo mv ./* /usr/lib/ide/;

#Add IDEA launcher to your PATH. Doing so allows you to run 'idea.sh' command from the terminal
rm /usr/bin/idea.sh;
sudo ln -s /usr/lib/ide/idea-IC*/bin/idea.sh /usr/bin/;

#If you use VirtualBox , you can share your projects between Host and guest. Name of shared
#folder must match 'IdeaProjects' Remove this if you don't need...
if [ ! -d "~/IdeaProjects" ]; then
    sudo mkdir ~/IdeaProjects;
fi

sudo rm -rf /org-thejarbar-work-dir;

exit 0;

Обратите внимание, что сценарий работает (делает то, что требуется), но ошибка вызывает беспокойство, так как я работаю над тем, чтобы поделиться этим сценарием с другими. Я пытаюсь избежать ошибки.

Ответы [ 2 ]

3 голосов
/ 03 января 2012

Во-первых, сейчас это не bash-скрипт - это скрипт оболочки bourne. Если вы хотите использовать bash, измените первую строку («шебанг») на /bin/bash. Вы показали своим комментарием, что /bin/sh на самом деле dash в вашей системе. dash - минимальная реализация оболочки Bourne.

Вы можете отладить bash-скрипт, запустив его с -x, например: /bin/bash -x script.sh; или изменив шебанг на #!/bin/bash -x (временно).

Кроме того, вы проверяете каталоги и создаете их, если они не существуют. Если это все, что вы собираетесь делать в предложениях if, вы можете использовать простой mkdir -p, чтобы не возникало ошибки, если путь уже существует. Обратите внимание, что он может быть доступен не во всех * nix системах, но в GNU / Linux.

1 голос
/ 04 января 2012

Проверьте sh //*sh; и посмотрите, какие сценарии у вас есть, если что-нибудь соответствует?Эта строка в основном соответствует и запускает любые сценарии, оканчивающиеся на sh, расположенные по пути /.

...