$1 매개변수가 있는 If 또는 문이 계속 실패합니다.

$1 매개변수가 있는 If 또는 문이 계속 실패합니다.

블리치비트를 실행하기 위해 다음 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"!

실제 블리치비트 명령은 실행되지 않습니다. 저는 약간 초보자이므로 이 문제에 대해 도움을 주시면 감사하겠습니다.

답변1

귀하의 주요 점검은 논리적으로 만족하기가 불가능합니다.

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

"(not p) OR (not c)"가 있으므로 $1이 "c"일 때("p"가 ​​아니기 때문에) TRUE를 반환하고 마찬가지로 $1이 "p"일 때(그렇기 때문에) TRUE를 반환합니다. "c"가 아님), 두 경우 모두 오류 메시지가 표시됩니다.

FALSE를 반환하는 유일한 방법은 변수가 두 값을 모두 보유하는 경우입니다.동시에, 그러나 Bash에는 아직 양자 중첩이 없습니다. (펄은 그럴 수도 있다.)

&&대신 (AND) 연산자를 사용하면 됩니다 .

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

!명확성을 위해 (NOT)을 사용하여 조건을 뒤집을 수 있습니다 .

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

(여기서는 매개변수 개수 확인 $#이 중복되어 제거했습니다.)

더 단순화하기 위해 오른쪽은 [[와일드카드를 지원합니다.

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

관련 정보