Bash if instrukcja

0

Jak wszyscy wiedzą, proste ifzdanie jest takie:

jeśli KOMENDY TESTOWE; następnie KOMENDY KONSEKWENTOWE; fi

Następnie doktor mówi:

Lista TEST-POLECENIE jest wykonywana, a jeśli jej zwracany status to zero, wykonywana jest lista CONSEQUENT-COMMANDS

Czy to oznacza, że ​​status zwracany TEST-COMMAND jest konwertowany na wartość logiczną prawda / fałsz przy użyciu reguły:

status powrotu - 0 -> prawda
status powrotu - 1 -> fałsz

a następnie używane przez instrukcję if w celu ustalenia, jakie działanie podjąć?

Mulligan
źródło
1
Właśnie to oznacza: gdzie jest trudność?
AFH

Odpowiedzi:

1

Tak. Na przykład:

$ exitwith() { return $1; }
$ for stat in {0..10}; do
> if exitwith $stat; then
> echo "An exit status of $stat is considered true"
> else
> echo "An exit status of $stat is considered false"
> fi
> done
An exit status of 0 is considered true
An exit status of 1 is considered false
An exit status of 2 is considered false
An exit status of 3 is considered false
An exit status of 4 is considered false
An exit status of 5 is considered false
An exit status of 6 is considered false
An exit status of 7 is considered false
An exit status of 8 is considered false
An exit status of 9 is considered false
An exit status of 10 is considered false

Ale w rzeczywistości jest to trochę bardziej skomplikowane, ponieważ stanem wyjścia jest 8-bitowa liczba całkowita bez znaku, może ona mieścić się w zakresie od 0 do 255; wartości poza tym zakresem zmniejszają modulo 256 do tego zakresu:

$ for stat in -2 -1 255 256 257; do
> if exitwith $stat; then
> echo "An exit status of $stat (actually $?) is considered true"
> else
> echo "An exit status of $stat (actually $?) is considered false"
> fi
> done
An exit status of -2 (actually 254) is considered false
An exit status of -1 (actually 255) is considered false
An exit status of 255 (actually 255) is considered false
An exit status of 256 (actually 0) is considered true
An exit status of 257 (actually 1) is considered false
Gordon Davisson
źródło
2
... a dokładniej, jest to 8-bitowa liczba całkowita bez znaku . szczegółowe znaczenia można znaleźć na stronie tldp.org/LDP/abs/html/exitcodes.html .
donkiszotyczny
@quixotic: Good point; Zredagowałem to.
Gordon Davisson,