FAZER UM SHELL SCRIPT

1. FAZER UM SHELL SCRIPT

ANDRE CARLOS
ANDRECGBNAVAL

(usa Ubuntu)

Enviado em 22/11/2012 - 23:12h

PRECISO CRIAR UM SHELL QUE VERIFICA UMA VARIÁVEL DE SISTEMA EXISTE, SE NÃO EXISTIR O USURÁRIO DEVE DIGITAR O VALOR A SER ATRIBUÍDO.
OBS: USAR OS COMANDOS IF, SET, ENV, GREP, CUT, READ, EXPORT

BOM GALERA ESTOU DANDO OS PRIMEIROS PASSOS EM LINUX E NÃO TENHO IDEIA DE COMO COMEÇAR, SE ALGUÉM PUDER AJUDAR AGRADEÇO.


  


2. Re: FAZER UM SHELL SCRIPT

Paulo
paulo1205

(usa Ubuntu)

Enviado em 22/11/2012 - 23:40h

Olha, isso é tão simples que qualquer dica objetiva será a própria solução. Para não dar o peixe sem ensinar a pescar, eu recomendo que você leia a documentação do shell (digite "man bash" ou "man sh" num terminal do seu Linux ou Unix, ou procure na web por "bash manpage"). Ali estará tudo o que você precisa saber sobre variáveis, variáveis de ambiente e os comandos que você mencionou.

Em tempo: acostume-se a usar letras minúsculas também. Ao contrário do mundo DOS/Windows, no Unix elas fazem diferença.


3. COMO FAZER A COMPARAÇÃO

ANDRE CARLOS
ANDRECGBNAVAL

(usa Ubuntu)

Enviado em 22/11/2012 - 23:49h

PAULO, EU SEI FAZER UM SHELL, SEI USAR CADA COMANDO QUE LISTEI, EU NÃO CONSIGO COMPARA UMA VARIÁVEL QUE EXISTE COM OUTRA QUE NÃO EXISTE, ESSE O PROBLEMA COMO COMPRARA ALGO QUE EXISTE COM O QUE NÃO EXISTE


4. Re: FAZER UM SHELL SCRIPT

Paulo
paulo1205

(usa Ubuntu)

Enviado em 23/11/2012 - 01:20h

Mas por que você faria uma comparação de algo que existe com algo que não existe?

Entendo que o que você está chamando de "existir" seja a possibilidade de uma variável estar definida.

Eu não tinha reparado que você pode usar env e grep. Já que pode, é trivial ver se uma variável de ambiente está definida por meio de uma pipeline contendo esses dois comandos.

Mas você pode fazer o mesmo usando apenas os comandos internos do shell. Como eu disse, o melhor é ler a manpage (procure a seção "Parameter Expansion"), para usar o recurso que melhor se encaixar na sua necessidade.


5. ALGUEM PODE FALAR O QUE ESTA ERRADO

ANDRE CARLOS
ANDRECGBNAVAL

(usa Ubuntu)

Enviado em 23/11/2012 - 22:38h

O meu shell esta com erro na linha 19; o erro é "erro de sintaxe próximo do token não esperado "fi". alguém pode ajudar resolver, desde já obrigado.

#!/bin/bash
echo "digite o nome da variavel:"
read variavel
var=`env | grep $variavel`
c=`echo $?`

if [ $c -eq 0 ]
then
echo "variavel encontrada!!!"
echo "local: $var"
else
echo "variavel nao encontrada!!"
echo "se deseja cria-la, digite 1. senão digite 0"
read opcao
if [ $opcao -eq 1 ], then
echo "digite a variavel em letras maisculas e seu valor"
if [ export <variavel>=<valor>] then
echo "variavel criada"
else
echo
fi
else
echo "optou por sair do programa!!!"

fi
fi



6. Re: FAZER UM SHELL SCRIPT

Paulo
paulo1205

(usa Ubuntu)

Enviado em 24/11/2012 - 09:54h

Você está com erro de sintaxe nas linhas com o comando if. Sempre que você optar por escrever o then na mesma linha que o if, deve precedê-lo de um ponto-e-vírgula (";"), para que o shell saiba que o comando que o if vai avaliar já acabou (caso contrário, o shell vai entender que a palavra "then" é um argumento do comando).


7. Re: FAZER UM SHELL SCRIPT

Elder Marco
eldermarco

(usa Fedora)

Enviado em 24/11/2012 - 19:40h

Há muitas coisas que você pode mudar nesse script. A começar por tentar achar a variável através do comando ENV. Você pode simplesmente testar se ela existe com um if:


# Verifica se uma dada variável não está vazia. Se ela não existe, estará.
if [ -n "$VAR" ]; then
echo "A variável dada existe"
else
echo "A variável dada não existe"
fi



Mas daí fica uma pergunta: Como transformar uma string dada no nome de uma variável? Para pensar... =)

Depois do if [ ... ] você deve colocar um ';' se for deixar o then na mesma linha:


# Note o ';' depois do if [ ... ]
if [ $# -gt 2 ]; then
echo "mais de dois argumentos dados."
fi


Mas se não for na mesma linha, sem problemas. Você pode omitir:


# Aqui não precisamos do ';', já que o then está na linha seguinte
if [ $# -gt 2 ]
then
echo "mais de dois argumentos dados."
fi


E por último, você deve entender que o [ ... ] é um comando test disfarçado. Ou seja, fazer isso


# Aqui não precisamos do ';', já que o then está na linha seguinte
if [ $# -gt 2 ]; then
echo "mais de dois argumentos dados."
fi


ou isso


# Aqui não precisamos do ';', já que o then está na linha seguinte
if test $# -gt 2; then
echo "mais de dois argumentos dados."
fi


É a mesma coisa.
O if permite testar se comandos foram bem sucedidos ou não, através do seu código de retorno. Por exemplo, um comando no terminal que é bem sucedido em sua execução sempre retorna 0 (zero). Se retornar um outro número, é porque houve algum problema. O if testa esses retornos (a variável $? guarda o valor de retorno do último comando executado, como você usou ela no seu script). O comando test, por sua vez, permite testar condições e retornar um dado valor, dependendo se a expressão for verdadeira ou falsa. Se verdadeira, ele retorna zero (comando bem sucedido). Caso contrário, retorna algum outro valor diferente de zero (1, por exemplo).


8. Re: FAZER UM SHELL SCRIPT

Paulo
paulo1205

(usa Ubuntu)

Enviado em 24/11/2012 - 21:01h

eldermarco escreveu:

Há muitas coisas que você pode mudar nesse script. A começar por tentar achar a variável através do comando ENV. Você pode simplesmente testar se ela existe com um if:


# Verifica se uma dada variável não está vazia. Se ela não existe, estará.
if [ -n "$VAR" ]; then
echo "A variável dada existe"
else
echo "A variável dada não existe"
fi


Não é bem assim. O que é "existir"? Se eu fizer, por exmeplo, var="", esse teste vai retornar como falso, mas a variável "existe" (i.e.: está definida).


Mas daí fica uma pergunta: Como transformar uma string dada no nome de uma variável? Para pensar... =)


Nem tanto. Se ele tivesse lido a manpage, como eu indiquei, saberia não apenas isso, mas também o outro problema que eu mencionei acima.


9. Re: FAZER UM SHELL SCRIPT

Elder Marco
eldermarco

(usa Fedora)

Enviado em 24/11/2012 - 22:32h

Paulo,

Se você der uma olhada no código dele, perceberá que ele está se referindo a variáveis de ambiente. Se elas existem ou não. Mas você está certo com relação ao fato de uma variável ser vazia e mesmo assim existir, não pensei nisso. No entanto, é difícil que uma variável de ambiente seja setada como vazia pelo sistema. Mesmo assim, considerando esse caso, poderíamos fazer algo do tipo para saber se ela existe ou não:


grep "^${var}=" <(env) && echo "existe" || echo "não existe"


O sinal de igual é importante nesse caso.


10. Re: FAZER UM SHELL SCRIPT

Paulo
paulo1205

(usa Ubuntu)

Enviado em 25/11/2012 - 17:42h

Para o shell, o tratamento de variável de ambientes e de variáveis comuns é basicamente o mesmo -- i.e. o acesso a elas se dá da mesma forma, e, aliás, o comando export transforma em variável de ambiente o que antes era uma variável comum.

O bash suporta avaliação indireta de variáveis de duas maneiras: a "clássica", que vem desde o Bourne Shell original, é por meio do comando eval; a "moderna", que funciona somente no bash, usa a sintaxe ${!var}. Veja o exmplo abaixo.

$ a=b
$ b=c
$ echo ${!a}
c


Quanto ao teste de variáveis não definidas ou com valor nulo no shell, é interessante aprender a usar as expansões ${var-word}, ${var+word}, ${var:-word} e ${var:+word}.


11. como resouver essa linha

ANDRE CARLOS
ANDRECGBNAVAL

(usa Ubuntu)

Enviado em 26/11/2012 - 18:07h

Bom galera para terminar não consigo resolver essa três linha que ficar dando erro.

echo "informe o nome da variavel a ser cirada:"
read nome
echo "informe o valor da variavel"
read valor
export $nome $valor

ai parece um monte de linhas falando declare -x, e não cria a . alguém pode ajudar






Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts