Problema com o arquivo .sh

0

Eu não tenho experiência em escrever arquivos .sh. Desejo executar o utilitário pvm2raw de este aplicativo do Biblioteca de volumes .

Eu recebo o seguinte erro ao executar o build.sh no Ubuntu 10.10.

build.shéoseguinte:    #makecommand    conjuntommfile=V3Makefile    setmake="make -f $ mmfile"

set rule=$1
if ($rule == "") set rule="all" // line 16

if ($rule == "deps") then
   if ($HOSTTYPE == "iris4d") $make MAKEDEPEND="CC -M" OPTS="-DHAVE_CONFIG_H -DVIEWER_HAVE_DCMTK" TARGET=IRIX depend
   if ($HOSTTYPE == "i386") $make MAKEDEPEND="c++ -M -I/usr/X11R6/include" OPTS="-DHAVE_CONFIG_H -DVIEWER_HAVE_DCMTK" TARGET=LINUX depend

O que há de errado aí?

Edit: Eu segui o conselho do kniwor e instalei o csh. Agora recebo o seguinte erro:

Como posso resolver este problema de variável indefinida?

    
por andandandand 11.02.2012 / 05:56

2 respostas

2

Parece um script c-shell. Use

sudo apt-get install csh

e tente executar o script no c-shell. Você pode abrir o c-shell executando csh no bash shell.

    
por ste_kwr 11.02.2012 / 06:13
1

É uma boa forma e reduz a confusão para iniciar todos os scripts shell declarando o shell no qual eles devem ser executados. A primeira linha para um shell Borne (o que você chamou de ".sh") é " #!/bin/sh ". Isso ajuda a remover toda a confusão sobre qual shell, pois cada um tem nuances em sua sintaxe e estrutura de comando.

Para um shell de Borne, o comando if é mais parecido com isto: if [$ rule="deps"]; então  # processo baseado em HOSTTYPE fi

Algumas outras sugestões, podem não ser um problema aqui, mas podem incomodá-lo com o tempo.

1- defina uma convenção de nomenclatura de variável consistente, como todas as maiúsculas, para que você possa ler o código e identificar as variáveis mais facilmente. 2- Use as chaves para se referir a variáveis para que elas não fiquem "confusas". 3- Ao comparar strings, coloque suas variáveis entre aspas também.

Então, vamos alterar a primeira linha de

if ($rule == "") set rule="all"

para

if [ "${rule}XXX" = "XXX" ]; rule="all"

As chaves protegem o confuso com o XXX, essa sintaxe diz o valor da variável "rule" com "XXX" anexado ao final. Portanto, se o resultado for apenas XXX, você saberá que a variável estava vazia ou nula.

Para o hosttype, você pode tentar adicionar outra linha como a regra:

set HOSTTYPE=$2

e, quando você inicia o script, adiciona um segundo parâmetro ao inserir o tipo de host, por exemplo, build.sh deps i386

    
por Hey Gary 12.04.2012 / 06:46