Ich habe das folgende Bash-Skript geschrieben, um Bleachbit auszuführen.
#!/bin/bash
# Use p for preview and c for activating cleaners after script name
followed by a gap. Example: bb p or bb c.
if [[ $1 != "p" ]] || [[ $1 != "c" ]] || [[ $# -eq 0 ]]
then echo 'No, or false parameter selected! Please use p for "preview"
or c for "clean"!'
else
# /usr/bin/bleachbit -$1 adobe_reader.cache
/usr/bin/bleachbit -$1 adobe_reader.mru
/usr/bin/bleachbit -$1 adobe_reader.tmp
.
.
.
fi
Das Skript heißt bb. Ich erhalte immer dieselbe Meldung, egal ob ich einfach bb, bb x, bb g, bb c oder bb p ausführe.
No, or false parameter selected! Please use p for "preview"
or c for "clean"!
Die eigentlichen Bleachbit-Befehle werden nie ausgeführt. Ich bin ein ziemlicher Neuling und bin daher für jede Hilfe dankbar, die ich hierzu bekommen kann.
Antwort1
Ihre Hauptprüfung kann logisch nicht erfüllt werden:
[[ $1 != "p" ]] || [[ $1 != "c" ]]
Da Sie „(nicht p) ODER (nicht c)“ haben, wird dies TRUE zurückgeben, wenn $1 „c“ ist (weil es nicht „p“ ist), und ebenso wird es TRUE zurückgeben, wenn $1 „p“ ist (weil es nicht „c“ ist), und Sie erhalten also in beiden Fällen die Fehlermeldung.
Der einzige Weg, wie es FALSE zurückgeben würde, wäre, wenn die Variable beide Werte enthalten würdegleichzeitig, aber Bash hat noch keine Quantensuperpositionen. (Perl vielleicht.)
&&
Dies würde stattdessen mit einem (UND)-Operator funktionieren :
if [[ $1 != "p" ]] && [[ $1 != "c" ]]; then
if [[ $1 != "p" && $1 != "c" ]]; then
Der Übersichtlichkeit halber können Sie (NOT) verwenden, !
um die Bedingung umzukehren:
if ! [[ $1 == "p" || $1 == "c" ]]; then
(Die Parameteranzahlprüfung $# ist hier überflüssig, deshalb habe ich sie entfernt.)
Um es noch weiter zu vereinfachen, werden auf der rechten Seite [[
Platzhalter unterstützt:
if [[ $1 != [pc] ]]; then