$1 パラメータを持つ if またはステートメントが失敗し続けます

$1 パラメータを持つ if またはステートメントが失敗し続けます

bleachbit を実行するために次の bash スクリプトを作成しました。

#!/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

スクリプトの名前は bb です。bb、bb x、bb g、bb c、bb p のどれを実行しても、常に同じメッセージが表示されます。

 No, or false parameter selected! Please use p for "preview"     
          or c for "clean"!

実際の bleachbit コマンドは実行されません。私は初心者なので、この点について何か助けていただければ幸いです。

答え1

あなたの主なチェックは論理的に満たすことが不可能です:

[[ $1 != "p" ]] || [[ $1 != "c" ]]

「(not p) OR (not c)」があるため、$1 が「c」の場合 (「p」ではないため) TRUE が返され、同様に $1 が「p」の場合 (「c」ではないため) TRUE が返されるため、どちらの場合もエラー メッセージが表示されます。

FALSEを返す唯一の方法は、変数が両方の値を保持している場合です同時にただし、Bash にはまだ量子重ね合わせ機能はありません。(Perl にはあるかもしれません。)

&&代わりに (AND) 演算子を使用すると機能します。

if [[ $1 != "p" ]] && [[ $1 != "c" ]]; then
if [[ $1 != "p" && $1 != "c" ]]; then

わかりやすくするために、!(NOT) を使用して条件を反転することもできます。

if ! [[ $1 == "p" || $1 == "c" ]]; then

(パラメータ数チェック $# はここでは冗長なので削除しました。)

さらに簡略化するために、 の右側では[[ワイルドカードがサポートされます。

if [[ $1 != [pc] ]]; then

関連情報