iT邦幫忙

DAY 6
6

快快樂樂學會讓電腦幫我做事系列 第 6

[Shell Script] Day06-清晰好還是朦朧好呢

昨天經歷了判斷字串的折磨後,其實真正在應用上我們會發現『判斷字串是否完全吻合,好像不是那麼好用』

那如果到逢甲呢? ..... 冷
『問世間情為何物,真的讓人看不透也猜不透』

昨天經歷了判斷字串的折磨後,其實真正在應用上我們會發現『判斷字串是否完全吻合,好像還是不夠用』

沒錯!其實真正在應用上除了判斷字串之外,還有另一個更常用到,那就是-判斷關鍵字或者模糊的判斷或者只判斷開頭是不是某個字或者…(好像講太多了,下雨啦~快收衣服阿~XD …),反正就是看下去吧無言

#!/bin/bash

echo -n "你好!請輸入一個單字:"
read MY_WORD

if [ "$MY_WORD" == "Pajace2001" ]; then
        echo "你輸入的不是 Pajace2001 "
elif [ "$MY_WORD" == "Pajace9527" ]; then
        echo "你輸入的是 Pajace9527"
elif [[ $MY_WORD == Pajace* ]]; then
        echo "你輸入的是 Pajace 開頭的字 - $MY_WORD "
elif [[ $MY_WORD =~ Pajace ]]; then
        echo "你輸入的是含有 Pajace 字 - $MY_WORD "
else
        echo "你輸入的是 $MY_WORD "
fi 

有發現什麼不一樣的地方了嗎?沒錯!就是多了一個正規劃的判斷式(=~
和萬用字元(*),至於什麼是正規化我就先不介紹了,萬用字元(*)應該大家都知道吧。對正規劃有興趣的人可以參考鳥哥的正規表示法介紹,相信一定會很有收穫。

注意!!因為我們使用到正規劃的判斷式(=~),所以這個判斷式要使用雙中括號包起來,另外含有萬用字元(*)的那個字串不可以用雙引號圍住,否則就會判斷錯誤喔!如果你是個好奇寶寶,想知道為什麼的話,可以用昨天介紹的 set –xv自個兒去探個險~你就會明白為什麼了,很有趣吧!動手試試會得到更多!去吧~

我來看看執行的結果:

這樣清楚了嗎?所以是「清晰好,還是朦朧好」,答案是:「都好」。
那『媽媽跟老婆掉到水裡要先救誰?』答案是:
偷笑

突然想到以前老師的一個冷笑話:『如果你到逢甲夜市……………要吃小吃』
冷

落寞落寞

鐵人賽文章分享
上一篇 2001和9527傻傻分不清楚
下一篇 迴圈之一 for NO.1


上一篇
[Shell Script] Day05-2001和9527傻傻分不清楚
下一篇
[Shell Script] Day10-迴圈 while 的三個樣子
系列文
快快樂樂學會讓電腦幫我做事27
0
鐵殼心
iT邦高手 1 級 ‧ 2013-09-27 13:32:40

拍手

pajace2001 iT邦研究生 1 級‧ 2013-09-28 22:30:00 檢舉

謝謝

0
kawasakifyu
iT邦新手 4 級 ‧ 2016-12-07 16:51:14

雖然已經過了三年,留言也不知道作者是否會看到,甚至回答。但本魯正在學習Shell Script,對於最後一段

else
    echo "你輸入的是 $MY_WORD ""

感覺好像沒有效果,甚至可以說沒有必要。這樣對嗎?

pajace2001 iT邦研究生 1 級‧ 2016-12-08 08:57:42 檢舉

是阿,這是當初寫的時候沒考慮到的
應該會被前面的判斷式給攔下來

想不到作者出面回答問題,售後服務真是一級棒!!!/images/emoticon/emoticon37.gif
這樣本魯的疑惑就解開了~~~還有後面20多天,搞不好還會陸續產生問題,再請版主多多指導了!!

0
kawasakifyu
iT邦新手 4 級 ‧ 2016-12-16 14:16:28

為何萬用字元(*)

不能使用雙引號圍住? 實測set -xv之後,該判斷式變成\P\a\j\a\c\e*,但不是很懂真正的含意

+ '[' P == Pajace2001 ']'
+ '[' P == Pajace9527 ']'
+ [[ P == \P\a\j\a\c\e\* ]]
+ [[ P =~ Pajace ]]
+ echo '你輸入的是 P '
你輸入的是 P

我要留言

立即登入留言