作者 主題: 請問Shell Script 判斷問題 變數由/開始才能通過,否則不能通過是應該如何寫呢??  (閱讀 7065 次)

0 會員 與 1 訪客 正在閱讀本文。

alantang888

  • 懷疑的國中生
  • **
  • 文章數: 75
    • 檢視個人資料
while 那裡要怎樣寫呢?
我這樣寫要打出/* 才通通過  ???


read -p "Please enter Trac BASE directory [/trac] " trac_base

while [ "$trac" != "/*" ]
do
read -p "Please input directory start with \"/\": " trac_base
done

darkranger

  • 榮譽學長
  • 俺是博士!
  • *****
  • 文章數: 1370
    • 檢視個人資料
    • http://darkranger.no-ip.org
為何不是加個判斷
讓變數開頭有「/」則直接取用
若開頭無「/」則主動補上再使用

alantang888

  • 懷疑的國中生
  • **
  • 文章數: 75
    • 檢視個人資料
差不多,若開頭無「/」則要重新輸入

netman

  • 管理員
  • 俺是博士!
  • *****
  • 文章數: 17464
    • 檢視個人資料
    • http://www.study-area.org

kenduest

  • 酷!學園 學長們
  • 俺是博士!
  • *****
  • 文章數: 3675
    • 檢視個人資料
    • http://kenduest.sayya.org
while 那裡要怎樣寫呢?
我這樣寫要打出/* 才通通過  ???

代碼: [選擇]
grep -q "^/\*" $trac_base
code=$?
if [ "$code" -eq 0 ]; then
    echo "beginning with /*"
fi

--
I am kenduest - 小州

my website: http://kenduest.sayya.org/

darkranger

  • 榮譽學長
  • 俺是博士!
  • *****
  • 文章數: 1370
    • 檢視個人資料
    • http://darkranger.no-ip.org
差不多,若開頭無「/」則要重新輸入
呃,我指的是由程式主動補上

netman

  • 管理員
  • 俺是博士!
  • *****
  • 文章數: 17464
    • 檢視個人資料
    • http://www.study-area.org
while [ -z "${trac##/*}" ]

抱歉,上面這個不是很周全。
還是用 grep 會比較簡單:

代碼: [選擇]
unset trac_base
until echo $trac_base | grep -q '^/'
do
       read -p "Please input directory start with \"/\": " trac_base
done

alantang888

  • 懷疑的國中生
  • **
  • 文章數: 75
    • 檢視個人資料
kenduest大大,你那個會出現這個"grep: /asdas: 沒有此一檔案或目錄"但也謝謝 ^_^

成功了,謝謝netman ^_^ ,但我如果這個程式碼的話無論我第一次是否輸入 / 開始,都會問第2次。
代碼: [選擇]
read -p "Please enter Trac BASE directory [/trac] : " trac_base

unset trac_base
until echo $trac_base | grep -q '^/'
do
       read -p "Please input directory start with \"/\": " trac_base
done

用你方法的概念改出了少許改動:
代碼: [選擇]
read -p "Please enter Trac BASE directory [/trac] : " trac_base

                if [ "$trac_base" == "" ]; then
                trac_base=/trac
                fi

        echo $trac_base | grep -q '^/'
        error_code=$?

        while [ "$error_code" != "0" ]
        do
        read -p "Trac BASE directory MUST start with \"/\" : " trac_base
                        if [ "$trac_base" == "" ]; then
                        trac_base=/trac
                        fi
                echo $trac_base | grep -q '^/'
                error_code=$?
        done
echo $error_code



echo $trac_base

謝謝各位的幫忙 ^_^
« 上次編輯: 2008-02-22 17:46 由 alantang888 »

netman

  • 管理員
  • 俺是博士!
  • *****
  • 文章數: 17464
    • 檢視個人資料
    • http://www.study-area.org
用我的方法,您原本的第一行 read ...... 就省掉不寫就好了啊。

alantang888

  • 懷疑的國中生
  • **
  • 文章數: 75
    • 檢視個人資料
啊!!原來如此!!謝謝你,剛剛開始學script,請勿見怪

thyme

  • 老人組
  • 俺是博士!
  • *****
  • 文章數: 1281
    • 檢視個人資料
代碼: [選擇]
unset trac_base
until echo $trac_base | grep -q '^/'
do
       read -p "Please input directory start with \"/\": " trac_base
done

我也來練習一下 Shell 程式。
改自上述程式
引用
#!/bin/bash
unset trac_base
until [ "${trac_base:0:1}" = "/" ]
do
   read -p "Please input directory start with \"/\": " trac_base
done