Ciao
Questa volta ti mostrerò come creare uno script con condition in Bash, che tradotto è:
Se X cosa si desidera è stata eseguita, l'azione Y è completata, se non viene eseguita, viene eseguita un'altra azione.
Semplice spiegazione no 😀
Ora, ho pensato per alcuni minuti a qualche esempio da utilizzare in questo tutorial, mi è venuto in mente il seguente dilemma / problema / situazione:
Siamo sulla rete della nostra azienda e vogliamo sapere se il computer X è connesso alla rete. Per questo realizziamo un file copione che cosa farà ping verso quel computer, e se è su una rete (cioè, se restituisce il file ping) ci dirà che SI, è sulla rete, altrimenti (cioè non è sulla rete) ci dirà che NON è sulla rete.
Una volta fatto ciò, ora spiegherò come ciclare con le condizioni 🙂
Ecco il codice:
ping -c 1 DIRECCION-IP
if [ $? -ne 0 ]; then
echo "No está en red"
else
echo "Sí está en red"
fi
Non preoccuparti, te lo spiego in dettaglio 😉
ping è il comando che useremo e ci dirà se quel PC è in rete. Per dirti quale PC vogliamo controllare se è in rete o meno, dobbiamo cambiare INDIRIZZO IP ovviamente dall'indirizzo IP del PC che vogliamo controllare.
Come puoi vedere, metto «-c 1«, Che ci è necessario. Quando eseguiamo il ping di un computer, questa azione non si ferma (il ping) fino a quando non premiamo noi stessi [Ctrl] + [C], così mettendo «-c 1»Vi diciamo di fare una sola verifica (solo un tentativo di ping) e nessun altro, questo lo farà fermare istantaneamente, cioè… controllerà se il computer è in rete solo una volta.
Se hai dubbi su questo, nessun dolore ... lo dicono e io glielo spiegherò di nuovo 😉
Ora arriva il ciclo, perché quello che ho appena spiegato non è altro che un normale comando / azione 😀
if [ $? -ne 0 ]; then
echo "No está en red"
else
echo "Sí está en red"
fi
Affinché tu lo capisca, spiegherò un dettaglio estremamente importante di Bash 🙂
Il più esperto dell'argomento potrebbe etichettarmi come sbagliato o qualcosa del genere, ma hey, lo scrivo per i principianti o meno esperti, purché lo capiscano bene
Succede che come in Bash è qualcosa di simile 0 y 1, cioè, o sei vivo o sei morto, quando viene eseguito un comando o un'azione: O ben eseguito Nessun problema (1), A ce n'erano alcuni problema o errore (0).
Eseguiamo l'azione o il comando X e ciò che abbiamo fatto potrebbe essere stato eseguito bene o male, potrebbe aver avuto un errore o meno, ed è qui che si trovano i dettagli 😉
Se quello che inviamo per fare (in questo caso: ping -c 1 INDIRIZZO IP) non ha dato un errore ed è andato a buon fine, quindi restituirà il valore: 1 . In caso contrario, e se l'azione (ovvero il ping) non ha avuto successo, restituirà il valore 0.
E infine, ciò che significa il codice sopra è questo:
Se è stato restituito il valore 0, allora
Visualizza il testo: «Non in rete»
Altrimenti (e NON 0, ma viene restituito 1)
Visualizza il testo: «Se è in rete«
Ciò che ti ho appena spiegato, ci servirà in futuro per molte cose, perché è davvero utile poter dire che se l'azione X ha dato un errore, fai l'azione Y, e nel caso l'azione X non ha dato un errore, quindi eseguire l'azione Z.
So che alcuni potrebbero essere un po 'confusi, quindi ho cercato di spiegarlo in molti modi diversi, cercando di farlo capire a tutti in un modo o nell'altro. Nel caso qualcuno rimanga in dubbio, fammelo sapere.
Ora, creiamo il nostro script 😀
Dobbiamo seguire i passaggi in questo tutorial: Bash: come creare uno script eseguibile
Quindi copiamo il seguente codice in quel file (script.sh), e alla fine diciamo «exit»(Senza virgolette):
ping -c 1 DIRECCION-IP
if [ $? -ne 0 ]; then
echo "No está en red"
else
echo "Sí está en red"
fi
Dovrebbe assomigliare a questo (ricorda che devono aver cambiato l'IP-ADDRESS nell'IP che vogliono):
Qui puoi vedere lo script in esecuzione:
% CODE1%
Come puoi vedere, alla fine ci dice «Sì, è in rete»🙂
La cosa importante qui è che effettivamente capiscano questa delle condizioni, quindi vi lascio un altro codice per spiegarlo di nuovo, ma da un altro punto di vista.
read "texto"
if [ "$texto" = "3" ]; then
echo "Correcto"
else
echo "Incorrecto"
fi
Ciò che significa è semplice, lascio la spiegazione riga per riga:
1a riga: Quello che scriviamo, sarà il valore della variabile «testo»(Senza virgolette).
2a riga: Controlla se il contenuto della variabile (quello che abbiamo appena scritto) lo è 3.
3a riga: In caso di essere 3, ci mostrerà il testo «Correggere»(Senza virgolette).
4a riga: Altrimenti (cioè, nel caso in cui non abbiamo scritto 3).
5a riga: Ci mostrerà il testo «Sbagliato»(Senza virgolette).
6a riga: Fine della condizione.
Come hanno saputo realizzare, se mettiamo eco e poi tra virgolette doppie («) un testo, questo farà sì che quel testo venga visualizzato nel terminale. Cioè, se mettiamo:
echo "esto es una prueba"
Ci mostrerà il testo nel terminale: questa è una prova
Ma tornando a questo secondo esempio, ti mostrerò l'utilità (e l'esecuzione) di questo secondo script con qualcosa di MOLTO semplice 😀… il tipico «quanto fa 1 + 2?«
Vi lascio il codice dello 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
Ecco come funziona lo script:
% CODE2%
E beh ... niente altro da aggiungere.
Questo è qualcosa di elementare, semplice sì, ma comunque ho cercato di spiegarlo nel miglior modo possibile, perché non tutti hanno l'anima di un programmatore, e tante volte abbiamo bisogno di fare script come questi (o simili), in ogni caso spero che questo articolo ti sia utile qualcuno 🙂
Qualsiasi dubbio o domanda, reclamo o suggerimento per favore, lascialo qui, ti risponderò volentieri e quindi impareremo un po 'di più 😀
saluti
Sei un professionista !!! *o*
Nah per niente 😀
Se ti è servito ed è interessante, sono soddisfatto 😉
Saluti amico
@ KZKG ^ Gaara,
parlando di programmazione bash ho una domanda:
Qual è la differenza tra dichiarare una variabile come questa VAR = hello e dichiararla come questa VAR = $ {VAR: -hello}?
Io spiego:
http://pastebin.com/a3cfWXeD
saluti 😉
Ciao
Beh, non sono affatto un esperto di bash ... in realtà, non ho idea di LOL !!
Mentre dichiaro le variabili è così:
: ${OPTFOLDER:="/opt/"}
Ma poiché l'ho sempre fatto così, non so quale potrebbe essere la differenza onestamente 🙁
@ KZKG ^ Gaara
Beh, ho posto la domanda perché la verità è che nemmeno io lo sapevo, di solito scrivo SlackBuilds e la verità è che le variabili dichiarate come in VAR1 abbondano in questi script. Una rapida ricerca su google mi ha aiutato a chiarire questa domanda, la condivido con tutti in modo che tutti possiamo imparare:
script:
http://pastebin.com/faAQb35w
Spiegazione:
Dichiarare variabili della forma VAR = $ {VAR: -default_value} significa che la variabile VAR assumerà il valore default_value se e solo se il valore è nullo o non esiste.
Esempio pratico:
Quando si esegue lo script, viene chiesto di inserire un valore da memorizzare nella variabile VAR, se viene inserito qualcosa mostrerà cosa è stato inserito. Se non inseriamo nulla e premiamo invio dichiariamo la variabile VAR come nulla, quindi mostra value_default.
Saluti.
HAHA Non lo sapevo 😀
Ok, grazie mille amico ... è quello che intendevo alla fine dell'articolo, non ho intenzione di insegnare qualcosa e basta, so che imparerò sempre qualcosa di nuovo qui 😀
Saluti e grazie ancora.
hai ragione, qui si imparano diverse cose.
saluti e buone feste !! 😀
Fantastico e spiegato in modo eccellente +1, il tempo che ti ci vorrà ...
ma valgo lo sforzo 😉
In realtà ho scritto l'80% in un solo giorno, mi ci è voluto così tanto per pubblicarlo solo perché il mio Internet non me lo permetteva.
Grazie per il tuo commento 😉
Un altro modo per farlo è utilizzare il DNS, poiché a volte le reti hanno il protocollo ICMP bloccato:
(host -ta IP-ADDRESS> / dev / null 2> & 1) && echo "Connesso alla rete"
Noterai anche che in questo esempio il controllo del valore restituito è implicito 😉
Tu come sempre amico, con consigli che non conosco completamente HAHAHA.
Grazie, il commento è apprezzato e hehe… un'altra cosa nuova che imparo 😀
grazie
🙂
Anche se sono passati diversi giorni dalla pubblicazione di questo argomento, mi è servito molto, ora che ho fatto un copione in bash .. Grazie Gaara ..
Doc. Grazie per l'aiuto che mi hai chiarito le cose.
Solo una domanda, come faccio in modo che quando un computer smette di eseguire automaticamente il ping, l'altro cambia IP. Ho questo.
per cambiare l'IP
#! / Bin / bash
ping -c 10 192.168.1.50 # Se non esegue il ping automaticamente
ifconfig eth0 192.168.1.50 maschera di rete 255.255.255.0 trasmissione 192.168.1.0
ifconfig eth0 inattivo
ifconfig eth0 su
perchè in confronto con il se usi il punto interrogativo? che differenza c'è tra mettere il? qualsiasi altra lettera
$? significa 'l'output precedente', cioè nel caso in cui il risultato del comando precedente ... 🙂
C'è un altro modo per ottenere lo stesso risultato, passando il comando ping direttamente come argomento a if:
se ping -c 1 INDIRIZZO IP; poi
echo "Sì, è in rete"
altro
echo "Non in rete"
fi
Quello che succede è che se valuta il valore di ritorno del comando che passi come argomento, se restituisce 0 è vero, qualsiasi altra cosa è falsa. Le parentesi quadre sono equivalenti al comando di test. Ma puoi passare qualsiasi comando come argomento (purché il comando restituisca un valore).
Ciao, come eseguo uno script.sh con un utente X nello script creo un utente Y e quell'utente Y continua a eseguire script.sh
Può essere fatto ??
Molto interessante, grazie!
Grazie per il contributo, sono stata un'ora a capirlo xD, ma l'ho capito !!!!.
Lo script va bene. Aritmeticamente potrebbe anche essere fatto come ($? == 0) se è uguale a zero non è sulla rete, altrimenti è sulla rete. E se vogliamo ancora renderlo un po 'più interattivo possiamo dire:
echo -n Immettere l'IP:
leggi ip
ping -c 1 $ ip
Ciao, sono molto nuovo in questo, sto cercando di creare un numero di ticket (alfanumerico) tramite una lettura e voglio che se ciò che viene inserito ha il formato corretto (ABC-123456) esegua un comando "x" e non lo faccio Non so come farlo, potresti aiutarmi?
echo "Inserisci biglietto"
leggi -p biglietto
if $ ticket = "nessuna idea (formato ABC-123456"); quindi cp file.txt $ ticket; else echo "Formato errato, riprova"; leggi -p; fi.
Certo è orribile e ridono ahah, ma come ho detto ho appena iniziato con questo.
Se ti spiego male per favore dimmelo e cerco di fare meglio.
Abbraccia tutti.
Ottima spiegazione, saluti
Ho un piccolo dubbio con if, else e altri.
Voglio uno script per verificare l'esistenza di un file (uno dei registri) e, in caso contrario, per crearlo e successivamente scriverci sopra. Ma se esiste, voglio che tu ci scriva.
Quello che ho è:
data = `data -R`
#Stavo testando la data variabile, che non viene aggiornata tra l'inizio di a
#processo e finisce, a volte può passare un'ora e l'ora esatta non esce.
if [-f /home/user/logs/test.log];
poi
tocca /home/usuario/logs/test.log
altro
echo "$ date: Aggiornato" >> /home/user/logs/test.log
echo «———————————————-» >> /home/user/logs/test.log
fi
In teoria dovrebbe andare bene, ma la realtà è che non viene aggiornato se il file di riferimento esiste già
scusa, ho visto che non è stato inviato ed è raddoppiato