Willkommen, Roger. Können Sie den Code in Ihrer Frage bitte in Code-Tags einschließen (oder die Code-Schaltfläche im Editor verwenden)? Es macht die Dinge viel einfacher zu lesen.
Telemachus
Antworten:
39
Sie können in Bash eine einfachere Syntax verwenden als einige der hier gezeigten:
#!/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
Vielen Dank! Ich wusste, dass es einen einfacheren Weg geben musste, aber ich hatte kein Glück. bash scripting war für mich schon immer eine schwarze kunst.
Quack Quijote
Dies führt zu der Fehlermeldung "((: 08: Wert zu groß für Basis (Fehlertoken ist" 08 ")" und "((: 09: Wert zu groß für Basis (Fehlertoken ist" 09 ")") " ubuntuforums.org/showthread.php?t=677751 zur Erklärung
Red Cricket
@RedCricket: Nur wenn Sie eine führende Null eingeben. Wenn das ein Problem ist, können Sie Folgendes tun: if (( 10#$number % 5 == 0 ))erzwingen $number, dass es als Basis 10 interpretiert wird (anstelle der durch die führende Null implizierten Basis 8 / Oktal).
Bis auf weiteres angehalten.
@ Deniis Williamson Ja das ist genauer. Vielen Dank! :)
Red Cricket
11
Es wird kein bc benötigt, solange es sich um eine Ganzzahl handelt (für Gleitkommazahlen benötigen Sie jedoch bc): In bash funktioniert der Operator (()) wie expr .
Wie andere darauf hingewiesen haben, ist die gewünschte Operation 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
Alternativ können Sie auch expr anstelle von bc verwenden: remainder =expr $number % $divisor
Dan Dyer
@Dan Ja, es sollte für das OP ausreichen. Ich denke jedoch, da es bcsich auf Berechnungen spezialisiert hat, kann es Dinge wie 33,3% 11,1 verarbeiten, die exprwahrscheinlich ersticken würden.
Nagul
würde definitiv ersticken; Ausdruck und (()) behandeln nur Ganzzahl-Mathematik.
Quack Quijote
3
Naguls Antwort ist großartig, aber nur zur Info, die gewünschte Operation ist Modul (oder Modulo) und der Operator ist im Allgemeinen %.
Nur im Interesse der Syntaxneutralität und der Korrektur der offensichtlichen Beeinträchtigung der Infix-Notation um diese Teile habe ich die Nagul-Lösung für die Verwendung modifiziert 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
Mir ist klar, dass dies eine sehr alte Frage ist, aber ich habe eine Frage zum Code. Ich bin relativ neu im Bashing und habe gerade versucht, dieses Skript auszuführen. Es gibt mir jedoch ein paar Fehler und ich weiß ehrlich gesagt nicht warum. Nach Eingabe von Zahl und Teiler erhalte ich: test.sh: 7: test.sh: dc: nicht gefunden Rest: test.sh: 10: [: unerwarteter Operator “Ihre Zahl ist nicht durch 2 teilbar” Haben Sie eine Idee warum ?
AreusAstarte
1
@AreusAstarte: Es bedeutet, dass Sie nicht dcinstalliert haben.
Bis auf weiteres angehalten.
0
Sie könnten auch exprso verwenden:
#!/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
Antworten:
Sie können in Bash eine einfachere Syntax verwenden als einige der hier gezeigten:
quelle
if (( 10#$number % 5 == 0 ))
erzwingen$number
, dass es als Basis 10 interpretiert wird (anstelle der durch die führende Null implizierten Basis 8 / Oktal).Es wird kein bc benötigt, solange es sich um eine Ganzzahl handelt (für Gleitkommazahlen benötigen Sie jedoch bc): In bash funktioniert der Operator (()) wie expr .
Wie andere darauf hingewiesen haben, ist die gewünschte Operation modulo (%) .
quelle
Wie wäre es mit dem
bc
Befehl:quelle
expr $number % $divisor
bc
sich auf Berechnungen spezialisiert hat, kann es Dinge wie 33,3% 11,1 verarbeiten, dieexpr
wahrscheinlich ersticken würden.Naguls Antwort ist großartig, aber nur zur Info, die gewünschte Operation ist Modul (oder Modulo) und der Operator ist im Allgemeinen
%
.quelle
Ich habe es anders gemacht. Überprüfen Sie, ob es bei Ihnen funktioniert.
Beispiel 1 :
Beispiel 2:
Einfache Logik.
12/3 = 4
4 * 3 = 12 -> gleiche Anzahl
11/3 = 3
3 * 3 = 9 -> nicht gleiche Anzahl
quelle
Nur im Interesse der Syntaxneutralität und der Korrektur der offensichtlichen Beeinträchtigung der Infix-Notation um diese Teile habe ich die Nagul-Lösung für die Verwendung modifiziert
dc
.quelle
dc
installiert haben.Sie könnten auch
expr
so verwenden:quelle