作者 主題: 關於shell字串判斷問題  (閱讀 5960 次)

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

James Wu

  • 鑽研的研究生
  • *****
  • 文章數: 683
    • 檢視個人資料
關於shell字串判斷問題
« 於: 2004-06-04 07:03 »
代碼: [選擇]

#!/bin/bash
echo -n "Please Enter xxxxxx"
read xxx
echo $xxx > tmp
xxxx=`cut -c1 /backup/tmp`
if [ "$xxxx" = 0 ] || [ "$xxxx" = 1] ; then
echo "it's wrong"
exit
fi
echo "it's ok"
rm tmp

小弟是想判斷使用者輸入的值第一個字是否為數字
除了一個一個打下去 || [ "$xxxx" = 2 ]......一直打到9之外的笨方法之外
有沒有其它寫法呢?

thyme

  • 老人組
  • 俺是博士!
  • *****
  • 文章數: 1281
    • 檢視個人資料
關於shell字串判斷問題
« 回覆 #1 於: 2004-06-04 09:57 »
代碼: [選擇]

#!/bin/bash
#讀取變數
read a
#在a變數中,由offset 0開始取出1個字元
b=${a:0:1}
#${b/[0-9]/} b變數中第一個符合0到9的字元取代成空字串
# -z 判斷是否為空字串
# && echo wrong && exit 前面判斷成立就執行echo及exit
[ -z "${b/[0-9]/}" ] && echo wrong && exit
# 判斷不成立,接著往下執行
echo ok

Pail

  • 俺是博士!
  • *****
  • 文章數: 1040
  • 性別: 男
    • 檢視個人資料
關於shell字串判斷問題
« 回覆 #2 於: 2004-06-04 09:58 »
小弟用 sed 來做.

HIT=`sed -n 's/\^([0-9].*\)/\1/p'`

再 check $HIT 的值, 如果是 空的, 就是沒有 match 到, 不是空的就是 ok !
Pail Luo.
Email: pail.luo@gmail.com

thyme

  • 老人組
  • 俺是博士!
  • *****
  • 文章數: 1281
    • 檢視個人資料
關於shell字串判斷問題
« 回覆 #3 於: 2004-06-04 10:09 »
代碼: [選擇]

#!/bin/bash
    # 讀取變數
read a
    # ${a/#[0-9]*/} 若a變數中第一個字元符合0到9後面為任意字元取代成空字串
    # -z 判斷是否為空字串
    # && echo wrong && exit 前面判斷成立就執行echo及exit
[ -z "${a/#[0-9]*/}" ] && echo wrong && exit
    # 判斷不成立,接著往下執行
echo ok

James Wu

  • 鑽研的研究生
  • *****
  • 文章數: 683
    • 檢視個人資料
關於shell字串判斷問題
« 回覆 #4 於: 2004-06-04 10:33 »
^^謝謝二位的指導

netman

  • 管理員
  • 俺是博士!
  • *****
  • 文章數: 17466
    • 檢視個人資料
    • http://www.study-area.org
關於shell字串判斷問題
« 回覆 #5 於: 2004-06-04 13:59 »
用 case 如何:
代碼: [選擇]
case $a in
    [0-9]*) comd; comd ;;
    *) echo "not a number" ; exit 1 ;;
ease

James Wu

  • 鑽研的研究生
  • *****
  • 文章數: 683
    • 檢視個人資料
關於shell字串判斷問題
« 回覆 #6 於: 2004-06-05 02:42 »
恩..請問netman學長
comd表示什麼?
或是要man什麼東西呢?
$man comd
No manual entry for comd
$man bash

case word in [ [(] pattern [ | pattern ] ... ) list ;; ] ... esac
              A  case  command  first  expands  word, and tries to match it against each pattern in turn, using the same matching rules as for pathname expansion (see Pathname
              Expansion below).  When a match is found, the corresponding list is executed.  After the first match, no subsequent matches are attempted.  The  exit  status  is
              zero if no pattern matches.  Otherwise, it is the exit status of the last command executed in list.
還是看不出comd是蝦咪

netman

  • 管理員
  • 俺是博士!
  • *****
  • 文章數: 17466
    • 檢視個人資料
    • http://www.study-area.org
關於shell字串判斷問題
« 回覆 #7 於: 2004-06-05 02:47 »
comd = command
(縮寫)
^_^

James Wu

  • 鑽研的研究生
  • *****
  • 文章數: 683
    • 檢視個人資料
關於shell字串判斷問題
« 回覆 #8 於: 2004-06-05 03:29 »
看來是我多想了 :oops: