2016-09-19 104 views
0

我試圖一定數量從記錄轉換在一個普通的分號分隔文本文件與bash:case語句顯示1和11之間沒有區別嗎?

group=$(echo $line | cut -d';' -f6) 

的可能值用於該列(6)的範圍內1-20。 例如如果數字「11」被發現了,我必須把它轉換爲「5A」

  case ${group} in 

     [1]*) 
       group='1a'; 
       echo $group >> "$file" 
     esac 
     ;; 
     [11]*) 
       group='5a'; 
       echo $group >> "$file" 
      esac 
      ;; 

然而,每次我執行腳本從10-19的所有值都默認爲[1]開關。 我試圖引用類似[「11」]或['11']的開關,但沒有成功。 如何正確切換10-19的值?

+0

不是你的代碼在語法上不正確嗎?你爲什麼有兩個'esac'?第一個不應該在那裏。 – euphoria83

回答

4

[11]相同[1]因爲它是一個字符類/範圍爲1至1。

你真的不需要通配符如果你的價值觀是數字:剛剛做的情況下是這樣的:

 1) 
      group='1a'; 
      echo $group >> "$file" 
    esac 
    ;; 
    11) 
      group='5a'; 
      echo $group >> "$file" 
     esac 
     ;; 

(依此類推:默認情況下是*) BTW)

如果數字其次是字母,你可以這樣做:

 1[a-z]) 
      group='1a'; 
      echo $group >> "$file" 
    esac 
    ;; 
    11[a-z]) 
      group='5a'; 
      echo $group >> "$file" 
     esac 
     ;; 

注意:如果你想匹配後跟111被任何東西,你可以這樣做:

 11*) 
      group='5a'; 
      echo $group >> "$file" 
     esac 
     ;; 

    1*) 
      group='1a'; 
      echo $group >> "$file" 
    esac 
    ;; 

(第2情況下將匹配由1開始而不是由11注開始的所有數字,我已經扭轉了這種情況,首先是最準確的匹配)。

做出選擇:)

+0

Fabre:按照你的建議反轉switch-statement,對我來說效果很好 – kzpm

+0

很酷!由於我不知道你的代幣的形式,我只是發佈了一個詳盡的解決方案。 –

相關問題