Testar o mesmo Script em vários Shells [RESOLVIDO]

1. Testar o mesmo Script em vários Shells [RESOLVIDO]

Geraldo Albuquerque
AprendiNoLinux

(usa Ubuntu)

Enviado em 15/08/2011 - 08:06h

Olá shelleiros.

Estou tentando testar este Script: http://www.vivaolinux.com.br/topico/Shell-Script/Shell-Script-bash-pega-IP-de-sua-maquina-na-NET-[DN... em Zsh

Aparentemente a instalação do Zsh foi ok.

Onde estou errando ?

1 - mudei o cabeçalho que estava com #!/bin/bash para #!/bin/zsh
2 - Após abrir um terminal normal que está em bash, digitei zsh
3 - Aparentemente abriu uma nova shell zsh
4 - executei o Script em questão e mostra o seguinte erro:


meuipnet:17: = not found

Não sei de onde ele pega este :17: o meuipnet é o nome da função ou a chamada dela no final do script.

[citando]function meuipnet {
[/citando]

ou

[citando]
meuipnet "/tmp/ip_net.txt" "$2"
[/citando]

Mesmo no shell bash/sh, quando eu chamo o script ele parece carregar o zsh e o erro é o mesmo.

Script inteiro para quem tem o zsh instalado pra testar.
=============================
#!/bin/zsh
#: file: meu_ip_light.sh (Retirado comentários e dados extras)
#: since: 2011-08-14 23:03 (GMT -03:00)
#: author: Geraldo T. Albuquerque - Twitter: @AprendiNoLinux ou @GA_Tux
#: version: 1.0 final - Sai que é sua Tafarel.
#------------------------------------------------------------------------------
#: objectives: Só pega IP na net e compara com o último gravado.
#------------------------------------------------------------------------------

function meuipnet {

clear
local _DIR_EXEC_RM _VALIDA_IP _SO_NUM_IP _ECHO_TRACO _MEU_IP_NET RED NC _ARQ_ATUAL _ARQ_TMP _vl
RED='\e[1;31m' ; NC='\e[0m'
_ARQ_TMP="/tmp/tmp_ip_tmp.tmp" ; _ARQ_ATUAL="/tmp/ip_net_agora.txt"
_DIR_EXEC_RM=$(whereis -b rm | sed 's/rm: //') ; _MEU_IP_NET="Nenhum"
[ $1 ] && _ARQ_ATUAL="$1"; [ $2 ] && _SO_NUM_IP="$2"
wget http://automation.whatismyip.com/n09230945.asp -q -O "$_ARQ_TMP"
if test -e "$_ARQ_ATUAL"; then _MEU_IP_NET=$(cat "$_ARQ_ATUAL"); fi
if test -e "$_ARQ_TMP"; then _ARQ_TMP=$(cat "$_ARQ_TMP"); fi
_vl='^(((1[0-9]|[1-9]?)[0-9]|2([0-4][0-9]|5[0-5]))\.){3}((1[0-9]|[1-9]?)[0-9]|2([0-4][0-9]|5[0-5]))$'
_VALIDA_IP=$(printf "${_ARQ_TMP}%s" | egrep "$_vl")
if test -z "$_VALIDA_IP"; then
printf "# ${RED} NÃO VALIDOU seu IP. Veja: ${_VALIDA_IP}%s\n"
exit 1 # Padrão de retorno de Erro
fi
if [ "$_SO_NUM_IP" == "IP" ]; then
printf "${_VALIDA_IP}%s\n"
else
if [ "$_MEU_IP_NET" == "$_VALIDA_IP" ]; then
printf "# Ip NET: [${RED}$_MEU_IP_NET${NC}]%s\n"
else
printf "# Ip é: [${RED}${_VALIDA_IP}${NC}] Anterior: ${_MEU_IP_NET}%s\n"
fi
fi
if test -e "$_MEU_IP_NET"; then $_DIR_EXEC_RM -f "$_ARQ_ATUAL"; fi
printf "${_VALIDA_IP}%s" > $_ARQ_ATUAL #Grava IP atual.
}

# Se usar Standalone ou no arq .bashrc, altere "nomearq.txt" e "$2" para "IP"
meuipnet "/tmp/ip_net.txt" "$2"

#EOF
==============================

oops: A minha intenção é testar os Scripts tanto em bash quanto em zsh. Estou pensando seriamente em mudar para o zsh porque ele tem suporte ao autoload e parece estar em constante desenvolvimento. Qualquer ajuda é bem vinda.

Quem tiver experiência em bash e zsh que possa dar um comparativo entre ambos, seria uma boa.

De antemão, obrigado.



  


2. MELHOR RESPOSTA

Raimundo Alves Portela
rai3mb

(usa Outra)

Enviado em 15/08/2011 - 08:31h

As saídas de erro dele levam em consideração o bloco, na sua função meuipnet na linha 17 tem um erro, que e o "=" não encontrado, e deve ao fato de você está usando 2 '='.

if [ "$_SO_NUM_IP" == "IP" ]; then

deve ficar assim:

if [ "$_SO_NUM_IP" = "IP" ]; then
na linha 20 também.

Obs.: Esse tipo de instrução funciona tanto no bash quanto no zsh (estou conhecendo o mesmo agora)

O bash é um padrão, e tem algumas diferenças na qual no momento não me recordo, agora essa coisa do constante desenvolvimento serve para os 2, sendo que o bash sai na frente por ser um padrão reconhecido.


ABraços

3. Re: Testar o mesmo Script em vários Shells [RESOLVIDO]

Geraldo Albuquerque
AprendiNoLinux

(usa Ubuntu)

Enviado em 15/08/2011 - 09:19h

Pelas barbas do profeta @rai3mb :) você tem razão. Ai jisuis.

Segui a especificação do livro que avisava para comparar strings com ' == ' :)

Após a alteração, funcionou perfeitamente.

oops, não resisti prof. Raimundo :) http://www.youtube.com/watch?v=Toylh9nQn0c&feature=related

Solucionado.






Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts