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