Wydaje się, że mylicie ewaluację warunkową z oceną arytmetyczną. % jest operatorem w ocenie arytmetycznej, a nie warunkowej. Zobacz bash(1) sekcje strony dla tych tematów. [...] jest do oceny warunkowej, podczas gdy ((...)) służy do oceny arytmetycznej.
Nie wspominając o tym, że Twoja linia shebang jest błędna, chyba że z jakiegoś powodu zainstalowałeś kopię basha na poziomie głównym dysku rozruchowego.
Wreszcie, nowa linia jest taka sama jak średnik. Nie musisz kończyć linii średnikiem w skryptach powłoki. Średnik po prostu istnieje, aby umożliwić umieszczenie dwóch instrukcji w jednym wierszu.
Oto wyczyszczona wersja skryptu:
#!/bin/bash
VAR1=10
VAR2=20
if (( (VAR1 % 2 == 0) && (VAR2 % 5 == 0) )); then
: #something (colon is a no-op)
fi
%
i%5
są uzasadnionymi argumentami[
?Odpowiedzi:
Po pierwsze
[
polecenie wykonuje tylko porównania. Musisz wykonać obliczenia oddzielnie. Na przykład:Ponieważ jednak wydajesz się pisać skrypt do basha, możesz użyć innego polecenia i uniknąć dodatkowego kroku:
Po drugie, nie można łączyć poleceń za pomocą
-a
. To działa tylko jako argument[
. Ale poza tym musisz użyć&&
.Trzy różne warianty:
Zawsze pamiętaj, składnia
if
jest prostyif dowództwo ; następnie dowództwo ; fi
. To znaczy że[
wif [
to tylko nazwa polecenials
lubecho
.źródło
Wydaje się, że mylicie ewaluację warunkową z oceną arytmetyczną.
%
jest operatorem w ocenie arytmetycznej, a nie warunkowej. Zobaczbash(1)
sekcje strony dla tych tematów.[...]
jest do oceny warunkowej, podczas gdy((...))
służy do oceny arytmetycznej.Nie wspominając o tym, że Twoja linia shebang jest błędna, chyba że z jakiegoś powodu zainstalowałeś kopię basha na poziomie głównym dysku rozruchowego.
Wreszcie, nowa linia jest taka sama jak średnik. Nie musisz kończyć linii średnikiem w skryptach powłoki. Średnik po prostu istnieje, aby umożliwić umieszczenie dwóch instrukcji w jednym wierszu.
Oto wyczyszczona wersja skryptu:
źródło
-a
ma dwa znaczenia;EXPR -a EXPR
jest logiczne AND.