Obtendo erros ao tentar executar o script de shell (Linux)

0

Estou tentando executar o script a seguir. Eu o executei antes sem problemas, mas agora me deparo com um erro.

#!/bin/bash
# init
function pause(){
   read -p "$*"
}

   echo & echo "(Website):" &&read input
   output=$(ping -c 1 "$input" 2>/dev/null)
   if [ $? -eq 0 ]; then
   ip=$(printf '%s' "$output" | gawk -F'[()]' '/PING/{print $2}'  2>/dev/null)
   clear
   echo
   echo "$ip"; 
   echo -n $ip | xclip -selection c
   echo
   echo
   echo IP copied to clipboard.
   echo
   echo && sleep 2
   pause 'Press [Enter] key to exit...'
   exit
else
   clear
   echo
   echo "Host not found";
   echo && sleep 1
   pause 'Press [Enter] key to exit...'
   exit
fi

Mas agora, de repente, isso resulta no seguinte erro:

3: /home/username/Desktop/shell.sh: Syntax error: "(" unexpected

Eu não fiz alterações no script em si e não entendo por que este colchete resulta em um erro agora. Alguém viu alguma coisa neste script que eu tenha perdido?

Versão do Bash: 4.2.45 (1) -release
nova instalação, mint 16 (atualizado tudo)

EDIT: Eu vou colocar isso aqui para que eu possa realmente mostrar o que acontece.
Acabei removendo completamente a função de pausa:

#!/bin/bash
# init

   echo & echo "(Website):" && read input
   output=$(ping -c 1 "$input" 2>/dev/null)
   if [ $? -eq 0 ]; then
   ip=$(printf '%s' "$output" | gawk -F'[()]' '/PING/{print $2}'  2>/dev/null)
   clear
   echo
   echo "$ip"; 
   echo -n $ip | xclip -selection c
   echo
   echo
   echo IP copied to clipboard.
   echo
   echo && sleep 2
   exit
else
   clear
   echo
   echo "Host not found";
   echo && sleep 1
   exit
fi  

Mas quando eu executo "sh ~ / Desktop / shell.sh" eu entendo isso:

: not found/Desktop/shell.sh: 3: /home/username/Desktop/shell.sh:  
(Website):  

(eu digito google.com e pressiono enter) e ele retorna

: bad variable name/shell.sh: 4: read: 
: not found/Desktop/shell.sh: 5: /home/username/Desktop/shell.sh: 
/home/username/Desktop/shell.sh: 24: /home/username/Desktop/shell.sh: Syntax error: word unexpected

Obrigado a todos pelas respostas, há algo errado com a própria shell?

    
por herros 23.06.2014 / 19:06

2 respostas

0

Eu retiro uma versão anterior do seu script. Não é necessário apagar a função.

Quando executo o script com \bin\bash MyScript.sh parece funcionar corretamente.
Se, em vez disso, eu executar com \bin\sh MyScript.sh , isso me causará erros.

Por quê?
Em muitas distribuições \bin\sh é um symlink para dash , em outro para bash , em outro pode ser o original sh .

Se você alterar com chown u+x MyScript.sh a permissão do script e depois de executá-lo com ./MyScript.sh , o sistema usará a primeira linha para entender com qual shell executá-lo. Você pode ler mais sobre o shebang aqui

Se você executar o script com sh MyScript.sh você força o script será executado com um shell diferente (neste caso /bin/sh ).

#!/bin/bash  

function pause(){  
   read -p "$*"  
}  

printf "\n(Website):" &&read input
output=$(ping -c 1 "$input" 2>/dev/null)
if [ $? -eq 0 ]; then
  ip=$(printf '%s' "$output" | gawk -F'[()]' '/PING/{print $2}'  2>/dev/null)
  clear                                              
  printf "\n${ip}";   
  echo -n $ip | xclip -selection c            
  printf "\n\nIP copied to clipboard.\n\n\n"
  sleep 2 
  pause 'Press [Enter] key to exit...'  
  exit 0  
else
  clear 
  printf "\n\n Host not found\n\n" 
  sleep 1  
  pause 'Press [Enter] key to exit...'  
  exit 1 
fi             

Nota:
Eu mudo muitos echo com printf , porque neste caso é mais compacto.
Com printf , você precisa se lembrar de colocar \n para ter uma nova linha, \t para uma guia e assim por diante ...

    
por 25.06.2014 / 20:37
-1

Remova os dois parênteses () da definição da sua função, por isso parece:

function pause {
    …
}

E este erro:

bad variable name/hey.sh: 4: read: Syntax error: word unexpected

É por causa disso:

&&read input

Isso deve ser assim:

&& read input

Apenas tentei isso com o bash 4.2.47-2 no fedora linux 20 64 bits.

    
por 23.06.2014 / 19:31