Olá
Desta vez, vou mostrar como fazer um script com condição em Bater, que traduzido é:
Se X coisa que você deseja for realizada, a ação Y é realizada, se não for realizada, então outra ação é realizada.
A explicação não é simples
Agora, pensei por alguns minutos em algum exemplo para usar neste tutorial, o seguinte dilema / problema / situação me ocorreu:
Estamos na rede da nossa empresa e queremos saber se o computador X está conectado à rede. Para isso fazemos um escrita que vai fazer sibilo em relação a esse computador, e se estiver em uma rede (ou seja, se ele retornar o sibilo) nos dirá que SIM, está na rede, caso contrário (ou seja, não está na rede), ele nos dirá que NÃO está na rede.
Feito isso, explicarei agora como fazer um loop com condições
Aqui está o código:
ping -c 1 DIRECCION-IP
if [ $? -ne 0 ]; then
echo "No está en red"
else
echo "Sí está en red"
fi
Não se preocupe, vou explicar isso em detalhes
sibilo é o comando que usaremos e nos dirá se o PC está na rede. Para saber qual PC queremos verificar se ele está ou não na rede, devemos mudar DIREÇÃO IP obviamente pelo endereço IP do PC que queremos verificar.
Como você pode ver, eu coloquei «-c 1«, O que é necessário para nós. Quando fazemos ping em um computador, essa ação não para (o ping) até que nos pressionemos [Ctrl] + [C], então colocando «-c 1»Dizemos para você fazer apenas uma verificação (apenas uma tentativa de ping) e nenhuma outra, isso fará com que pare instantaneamente, ou seja ... verificará se o computador está na rede apenas uma vez.
Se você tiver dúvidas sobre isso, não fique constrangido... é só dizer que terei MUITO prazer em te explicar novamente
Agora vem o ciclo, porque o que acabei de explicar nada mais é do que um comando/ação normal
if [ $? -ne 0 ]; then
echo "No está en red"
else
echo "Sí está en red"
fi
Para que você entenda isso, vou explicar um detalhe extremamente importante do Bash
Os mais conhecedores do assunto poderiam me chamar de errado ou algo parecido, mas ei, escrevo isso para novatos ou menos especialistas, desde que eles entendam, então ótimo
Acontece que como em Bater é algo como 0 y 1, ou seja, ou você está vivo ou morto, quando um comando ou ação é executado: bem executado Sem problemas (1), A havia algum problema ou erro (0).
Nós realizamos
Se o que enviamos para fazer (neste caso: ping -c 1 IP-ADDRESS) não deu um erro e foi bem-sucedido, então retornará o valor: 1 . Caso contrário, e se a ação (ou seja, o ping) não for bem-sucedida, ele retornará o valor 0.
E, finalmente, o que o código acima significa é:
Se o valor 0 foi retornado, então
Exibir o texto: «Fora da rede»
Caso contrário (e retorne NÃO 0, mas 1)
Exibir o texto: «Se estiver na rede«
Isso que acabei de explicar a você, vai nos servir no futuro para muitas coisas, porque é muito útil poder dizer que se a ação X deu um erro, faça a ação Y, e caso a ação X não tenha dado um erro, deixe Z ação.
Sei que alguns podem ficar um pouco confusos, então tentei explicar de várias maneiras diferentes, tentando fazer com que todos entendessem de uma forma ou de outra. Caso alguém fique em dúvida, avise-me.
Agora, vamos fazer nosso roteiro
Devemos seguir as etapas deste tutorial: Bash: como fazer um script executável
Então, vamos copiar o seguinte código para esse arquivo (script.sh), e no final vamos dizer «saída"(Sem as aspas):
ping -c 1 DIRECCION-IP
if [ $? -ne 0 ]; then
echo "No está en red"
else
echo "Sí está en red"
fi
Deve ser parecido com isto (lembre-se de que eles devem ter alterado o IP-ADDRESS para o IP que desejam):
Aqui você pode ver o script em execução:
% CODE1%
Como você pode ver, no final ele nos diz «Sim está na rede»
O importante aqui é que eles realmente entendam isso sobre as condições, então deixo outro código para explicar novamente, mas de outro ponto de vista.
read "texto"
if [ "$texto" = "3" ]; then
echo "Correcto"
else
echo "Incorrecto"
fi
O que isso significa é simples, deixo a explicação linha por linha:
1ª linha: O que escrevermos, esse será o valor da variável «texto"(Sem as aspas).
2ª linha: Verifique se o conteúdo da variável (o que acabamos de escrever) é 3.
3ª linha: Em caso de ser 3, vai nos mostrar o texto «Corrija"(Sem as aspas).
4ª linha: Caso contrário (isto é, caso não tenhamos escrito 3).
5ª linha: Ele vai nos mostrar o texto «Errado"(Sem as aspas).
6ª linha: Fim da condição.
Como eles foram capazes de perceber, se colocarmos eco e depois entre aspas duplas («) um texto, isso fará com que esse texto seja exibido no terminal. Ou seja, se colocarmos:
echo "esto es una prueba"
Ele nos mostrará o texto no terminal: isso é uma Prov a
Mas voltando a este segundo exemplo, vou mostrar a utilidade (e execução) deste segundo script com algo MUITO simples … o típico «quanto é 1 + 2?«
Deixo-vos o código do script completo:
#!/bin/bash
# -*- ENCODING: UTF-8 -*-
echo "¿Cuánto es 1 + 2?"
read "texto"
if [ "$texto" = "3" ]; then
echo "Correcto"
else
echo "Incorrecto"
fi
exit
Veja como o script funciona:
% CODE2%
E bem ... nada mais a acrescentar.
Isso é algo elementar, simples sim, mas ainda tentei explicar da melhor forma possível, pois nem todo mundo tem alma de programador, e muitas vezes precisamos fazer scripts como esses (ou similares), em qualquer caso eu espero que este artigo seja útil para alguém
Se você tiver alguma dúvida, dúvida, reclamação ou sugestão, deixe aqui, terei prazer em respondê-la e assim, todos aprenderemos um pouco mais
lembranças
Você é um profissional !!! *ou*
Nah por nada 😀
Se serviu a você e é interessante, estou satisfeito 😉
Saudações amigo
@ KZKG ^ Gaara,
por falar em programação bash, tenho uma pergunta:
Qual é a diferença entre declarar uma variável como VAR = hello e declarar VAR = $ {VAR: -hello}?
Quero dizer:
http://pastebin.com/a3cfWXeD
saudações 😉
Olá
Bem, eu não sou um especialista em bash ... na verdade, eu não tenho ideia LOL !!
Conforme eu declaro as variáveis, é assim:
: ${OPTFOLDER:="/opt/"}
Mas como sempre fiz assim, não sei qual poderia ser a diferença, honestamente 🙁
@ KZKG ^ Gaara
Bem, eu fiz a pergunta porque a verdade é que eu também não sabia, eu geralmente escrevo SlackBuilds e a verdade é que as variáveis declaradas como em VAR1 são abundantes nesses scripts. Uma rápida pesquisa no google ajudou-me a esclarecer esta questão, partilho-a com todos para que todos possamos aprender:
Script:
http://pastebin.com/faAQb35w
Explicação:
Declarar variáveis no formato VAR = $ {VAR: -default_value} significa que a variável VAR terá o valor default_value se e somente se o valor for nulo ou não existir.
Exemplo prático:
Ao executar o script, é solicitada a inserção de um valor a ser armazenado na variável VAR, se algo for inserido mostrará o que foi inserido. Se não inserirmos nada e pressionarmos enter, estaremos declarando a variável VAR como nula, portanto, ela mostra valor_padrão.
Saudações.
HAHA Eu não sabia disso 😀
Ok, muito obrigado amigo ... foi isso que quis dizer com o final do artigo, não pretendo ensinar nada e pronto, sei que sempre vou aprender algo novo aqui 😀
Saudações e obrigado mais uma vez.
tem razão, aprende-se várias coisas aqui.
saudações e boas festas !! 😀
Muito bem e bem explicado +1, o tempo que vai demorar ...
mas valho o esforço 😉
Na verdade, escrevi 80% em apenas 1 dia, demorei muito para postar só porque minha internet não permitiu.
Obrigado pelo seu comentário 😉
Outra forma de fazer isso é usando DNS, já que às vezes as redes têm o protocolo ICMP bloqueado:
(host -ta IP-ADDRESS> / dev / null 2> & 1) && echo "Conectado à rede"
Você também notará que, neste exemplo, a verificação do valor de retorno está implícita 😉
Você como sempre amigo, com dicas que não conheço completamente HAHAHA.
Obrigado, o comentário é apreciado e hehe ... outra coisa nova que eu aprendi 😀
obrigado
🙂
Mesmo que vários dias tenham se passado desde a publicação deste tópico, ele me serviu muito, agora que fiz um script em bash .. Obrigado Gaara ..
Doc. Obrigado pela ajuda que você deixou as coisas claras para mim.
Apenas uma consulta, como faço para que quando um computador para de pingar automaticamente o outro mude de IP. Eu tenho isto.
para mudar o IP
#! / Bin / bash
ping -c 10 192.168.1.50 # se não pingar automaticamente
ifconfig eth0 192.168.1.50 máscara de rede 255.255.255.0 transmissão 192.168.1.0
ifconfig eth0 para baixo
ifconfig eth0 up
porque ao comparar com o se você usar o ponto de interrogação? que diferença há entre colocar o? qualquer outra carta
$? significa 'a saída ou saída anterior', ou seja, no caso do resultado do comando anterior ... 🙂
Há outra maneira de obter o mesmo resultado, passando o comando ping diretamente como um argumento para se:
se ping -c 1 IP-ADDRESS; então
echo "Sim, está na rede"
outro
echo "Não está na rede"
fi
O que acontece é que se avalia o valor de retorno do comando que você passa como argumento, se retorna 0 é verdadeiro, todo o resto é falso. Os colchetes são equivalentes ao comando de teste. Mas você pode passar qualquer comando como argumento (desde que o comando retorne algum valor).
Olá, como faço para executar um script.sh com um usuário X no script eu crio um usuário Y, e esse usuário Y continua executando o script.sh
Isso pode ser feito ??
Muito interessante, obrigado!
Obrigado pela contribuição, já levei uma hora para entender xD, mas entendi !!!!.
O script está bom. Aritmeticamente, também poderia ser feito como ($? == 0) se for igual a zero não está na rede, caso contrário, está na rede. E se ainda quisermos torná-lo um pouco mais interativo, podemos dizer:
echo -n Digite o IP:
ler ip
ping -c 1 $ ip
Olá, sou muito novo nisso, estou tentando fazer um número de tíquete (alfanumérico) por meio de uma leitura e quero que se o que foi inserido estiver no formato correto (ABC-123456) execute um comando "x" e não não sei como fazer, você poderia me ajudar?
echo "Enter ticket"
leia -p bilhete
if $ ticket = "nenhuma ideia (formato ABC-123456"); então cp file.txt $ ticket; senão echo "formato errado, tente novamente"; ler -p; fi.
Claro que é horrível e eles riem haha, mas como eu disse, estou apenas começando com isso.
Se eu explicar mal, por favor me diga e eu tento fazer melhor.
Abraço a todos.
Excelente explicação, saudações
Tenho um pouco de dúvida com if, else e outros.
Quero um script para verificar se existe um arquivo (um dos logs) e, caso não exista, para criá-lo e depois gravá-lo. Mas se existir, quero que você apenas escreva para ele.
O que eu tenho é:
data = `data -R`
#Eu estava testando a data variável, que não é atualizada entre o início de um
#processo e termina, às vezes pode passar uma hora e não sai a hora certa.
if [-f /home/user/logs/test.log];
então
toque em /home/usuario/logs/test.log
outro
echo "$ date: Atualizado" >> /home/user/logs/test.log
echo «———————————————-» >> /home/user/logs/test.log
fi
Em teoria deveria estar bem, mas a realidade é que não é atualizado se o arquivo referenciado já existe
desculpe, vi que não foi enviado e dobrou