shell if 的一點體會

在跟蹤一個工程的編譯過程時,爲了方便實時變量的打印和過程的控制,想使用read讀取輸入的一個字符,然後判斷字符的值,再決定是否繼續執行,代碼如下:

#!/bin/bash

echo -e "\e[1;36m segement 1 \e[0m"
read ch
if [ $ch == "q" ];then
  exit
fi
echo -e "\e[1;36m segement 2 \e[0m"
                                  
其實,如果正常輸入字符的話是沒有任何問題的,例如下面兩種不同情況的輸入結果如下圖:

但是,如果執行過程沒有輸入字符,而是直接回車,那麼執行過程則會出現問題,如下圖:

原因則是:當輸入回車時,$ch是空值,相當於[ =="q" ],當然會出現問題!

解決辦法主要有2種:

1、不直接使用變量$ch,而是使用"$ch":

#!/bin/bash

echo -e "\e[1;36m segement 1 \e[0m"
read ch
if [ "$ch" == "q" ];then
  exit
fi
echo -e "\e[1;36m segement 2 \e[0m"
2、加入一對中括號"[]"

#!/bin/bash

echo -e "\e[1;36m segement 1 \e[0m"
read ch
if [[ $ch == "q" ]];then
  exit
fi
echo -e "\e[1;36m segement 2 \e[0m"
網上還有很多在第一種解決方法的基礎上,在字符串的後面加入一個字符來解決,個人認爲還是滿可取的。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章