Ho creato questo piccolo script bash per scaricare repository per me. Comunque se la dichiarazione non la valuta correttamente .... Ho provato molte varianti diverse ma non funzionano.
os=$(lsb_release -si)
version=$(lsb_release -sr)
arch = `getconf LONG_BIT`
if [[$os = "CentOs" && $version >= "6.0" && $arch = "64"]]
then
echo "Works fine"
echo $version
echo $os
fi
Proprio come informazioni: entrambi echo $os
& echo $version
funziona bene ESTERNO se le dichiarazioni.
Aggiornamento: output di bash -x test.sh
++ lsb_release -si
+ os=CentOS
++ lsb_release -sr
+ version=6.4
++ getconf LONG_BIT
+ arch=64
+ [[ CentOS = CentOs ]]
risposte:
3 per risposta № 1Questo:
arch = `getconf LONG_BIT`
dovrebbe essere:
arch=`getconf LONG_BIT`
o meglio:
arch=$(getconf LONG_BIT)
Non puoi usare spazi attorno ai compiti in bash
. Quello che hai scritto ha eseguito un comando chiamato arch
con argomenti =
e l'output di getconf LONG_BIT
(presumibilmente 32 o 64).
È inoltre necessario mantenere i nomi dei comandi (come ad esempio [[
) separato dagli argomenti, in generale. Quindi, è necessario modificare questo:
if [[$os = "CentOs" && $version >= "6.0" && $arch = "64"]]
quindi ha spazi attorno al nome del "comando" (dopo il [[
e prima del ]]
):
if [[ $os = "CentOs" && $version >= "6.0" && $arch = "64" ]]
Probabilmente racchiudere le variabili tra virgolette, ma non è necessario il 100%. Poi c'è il problema [[
non supporta il <=
o >=
operatori (qualcuno sa perché no?). Quindi, devi usare la logica negata:
if [[ $os = "CentOs" && ! ($version < "6.0") && $arch = "64" ]]
Stai attento. Allegare il !
al ($version < "6.0")
e ottieni "evento non trovato" (se volessi una conchiglia di mare, andrei in riva al mare, vorrei che lasciassero le notazioni storiche della shell di C fuori dal bash
).
os=$(lsb_release -si)
version=$(lsb_release -sr)
arch=$(getconf LONG_BIT)
if [[ $os = "CentOs" && ! ($version < "6.0") && $arch = "64" ]]
then
echo "Works fine"
echo "Version $version; OS $os; Arch $arch"
fi
-1 per risposta № 2
Per confrontare i numeri in virgola mobile in Bash, prova quanto segue:
- if [[$os = "CentOs" && $version >= "6.0" && $arch = "64"]]
+ if [[ $os = "CentOs" ]] && [[ "$(echo "if (${version} >= 6.0 1 else 0" | bc)" -eq 1 ]] && [[ $arch = "64" ]]
Vedere: Come confrontare due numeri decimali in bash / awk?