Non mi sono mai messo a studiare le differenze tra la shell bash a la dash.
Oggi ho preparato un piccolo script per controllare con quale ip sto uscendo (ho 2 linee in ufficio).
Se non esco dalla linea "giusta", faccio stampare un avviso:
Codice: Seleziona tutto
#!/bin/dash
ip_current="$(dig +short @resolver1.opendns.com myip.opendns.com)"
ip_provider_x="1.2.3.4"
[ "$ip_current" == "$ip_provider_x" ] || wall "Provider X is down!"Codice: Seleziona tutto
/usr/local/bin/check_active_network.sh: 6: [: 62.94.229.113: unexpected operatorCerco un po' di documentazione.
Faccio il giro da wikipedia per trovare il sito ufficiale che è composto da una singola pagina, modifica l'ultima volta nel 2011, con zero documentazione.
Correggetemi se sbaglio, ma il man sembra essere l'unica fonte ufficiale di informazioni.
Nel man leggo
Quindi propendo a pensare che '==' non sia usato in dash come operatore di confronto.Enclosing characters within double quotes preserves the literal meaning of all characters except dollarsign ($), backquote (`), and backslash (\).
Continuo la lettura del man...
Nella sezione "Flow-Control Constructs -- if, while, for, case" non parlano di operatori di confronto.
Finalmente trovo la risposta nella sezione
Codice: Seleziona tutto
[ expression ]
s1 = s2 True if the strings s1 and s2 are identical.
s1 != s2 True if the strings s1 and s2 are not identical.