Witaj Roger. Czy możesz zawinąć kod w swoim pytaniu w tagi kodu (lub użyć przycisku kodu w edytorze)? Sprawia, że rzeczy są dużo łatwiejsze do odczytania.
Telemachus
Odpowiedzi:
39
Możesz użyć prostszej składni w Bash niż niektóre inne pokazane tutaj:
#!/bin/bash
read -p "Enter a number " number # read can output the prompt for you.if(( $number %5==0))# no need for bracketsthen
echo "Your number is divisible by 5"else
echo "Your number is not divisible by 5"fi
dzięki! wiedziałem, że musi być prostszy sposób, ale nie miałem szczęścia. Skrypty bash zawsze były dla mnie trochę czarną sztuką.
quack quixote
Spowoduje to wyświetlenie komunikatu o błędzie „((: 08: wartość zbyt duża dla podstawy (token błędu to„ 08 ”)” i „((: 09: wartość zbyt duża dla podstawy (token błędu to„ 09 ”)) patrz ubuntuforums.org/showthread.php?t=677751 w celu wyjaśnienia
Red Cricket
@RedCricket: Tylko jeśli wprowadzisz wiodące zero. Jeśli to jest problem, możesz: if (( 10#$number % 5 == 0 ))wymusić $numberinterpretację jako podstawa 10 (zamiast podstawy 8 / ósemki sugerowanej przez wiodące zero).
Wstrzymano do odwołania.
@Deniis Williamson Tak, to jest bardziej dokładne. Dzięki! :)
Red Cricket,
11
Nie jest wymagane bc , o ile jest to matematyka liczb całkowitych (będziesz potrzebować bc do liczb zmiennoprzecinkowych): W bashu operator (()) działa jak wyrażenie .
Jak zauważyli inni, operacja, którą chcesz wykonać, to modulo (%) .
#!/bin/bash
echo "Enter a number"
read number
if[ $(( $number %5))-eq 0];then
echo "Your number is divisible by 5"else
echo "Your number is not divisible by 5"fi
!/usr/bin/bash
echo “Enter a number”
read number
echo “Enter divisor”
read divisor
remainder=`echo "${number}%${divisor}" | bc`
echo "Remainder: $remainder"if["$remainder"=="0"];then
echo “Your number is divisible by $divisor”else
echo “Your number is not divisible by $divisor”fi
Alternatywnie, możesz użyć wyrażenia zamiast bc: pozostała =expr $number % $divisor
Dan Dyer
@ Dan Tak, powinno wystarczyć OP. Myślę jednak, że ponieważ bcspecjalizuje się w obliczeniach, może obsługiwać takie rzeczy, jak 33,3% 11,1, które exprprawdopodobnie mogłyby się zadławić.
nagul
zdecydowanie zadławiłby się; expr i (()) obsługują tylko matematykę całkowitą.
quack quixote
3
Odpowiedź Nagula jest świetna, ale po prostu fyi, pożądaną operacją jest moduł (lub moduł), a operator ogólnie %.
Właśnie w interesie neutralności składni i naprawiania jawnego nachylenia notacji infix wokół tych części, zmodyfikowałem rozwiązanie nagul do użycia dc.
!/usr/bin/bash
echo “Enter a number”
read number
echo “Enter divisor”
read divisor
remainder=$(echo "${number} ${divisor}%p"| dc)
echo "Remainder: $remainder"if["$remainder"=="0"]then
echo “Your number is divisible by $divisor”else
echo “Your number is not divisible by $divisor”fi
Zdaję sobie sprawę, że to naprawdę stare pytanie, ale mam pytanie dotyczące kodu. Jestem stosunkowo nowy w bash i właśnie próbowałem uruchomić ten skrypt. Daje mi to jednak kilka błędów i szczerze mówiąc nie wiem dlaczego. Po wprowadzeniu liczby i dzielnika otrzymuję: test.sh: 7: test.sh: dc: nie znaleziono Pozostała część: test.sh: 10: [: nieoczekiwany operator „Twój numer nie jest podzielny przez 2” Czy masz pojęcie, dlaczego ?
AreusAstarte
1
@AreusAstarte: To znaczy, że nie masz dczainstalowanego.
Wstrzymano do odwołania.
0
Możesz również użyć exprtak:
#!/bin/sh
echo -n "Enter a number: "
read number
if[`expr $number % 5`-eq 0]then
echo "Your number is divisible by 5"else
echo "Your number is not divisible by 5"fi
Odpowiedzi:
Możesz użyć prostszej składni w Bash niż niektóre inne pokazane tutaj:
źródło
if (( 10#$number % 5 == 0 ))
wymusić$number
interpretację jako podstawa 10 (zamiast podstawy 8 / ósemki sugerowanej przez wiodące zero).Nie jest wymagane bc , o ile jest to matematyka liczb całkowitych (będziesz potrzebować bc do liczb zmiennoprzecinkowych): W bashu operator (()) działa jak wyrażenie .
Jak zauważyli inni, operacja, którą chcesz wykonać, to modulo (%) .
źródło
Co powiesz na użycie
bc
polecenia:źródło
expr $number % $divisor
bc
specjalizuje się w obliczeniach, może obsługiwać takie rzeczy, jak 33,3% 11,1, któreexpr
prawdopodobnie mogłyby się zadławić.Odpowiedź Nagula jest świetna, ale po prostu fyi, pożądaną operacją jest moduł (lub moduł), a operator ogólnie
%
.źródło
Zrobiłem to w inny sposób. Sprawdź, czy to działa dla Ciebie.
Przykład 1 :
Przykład 2:
Prosta logika.
12/3 = 4
4 * 3 = 12 -> ten sam numer
11/3 = 3
3 * 3 = 9 -> inny numer
źródło
Właśnie w interesie neutralności składni i naprawiania jawnego nachylenia notacji infix wokół tych części, zmodyfikowałem rozwiązanie nagul do użycia
dc
.źródło
dc
zainstalowanego.Możesz również użyć
expr
tak:źródło