我編寫了以下 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 還沒有量子疊加。 (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