2010-11-07 51 views
0

編輯:已解決。謝謝大家!Bash腳本只留下4位數字

我正在構建一個shell腳本,我堅持比較。我通過./myscript 1000調用它,其中1000位於名爲y的變量中。

的問題是我需要它,如果我通過任意4位數字給我的腳本,如0001它不會被我的if語句進行修改,但是當我把我的腳本它基本上是告訴我0001和1是一樣的東西。我如何檢查$ y的大小來解決我的問題?

我試過回顯y,它顯示0001和1時,當我將它們傳遞給我的腳本,但我不知道如何有任何4位數字留下。

####CODE SNIPP 
#NOT EVEN NEEDED, JUST FOR SHOW, need to think of 0000 to any 4 digit # 
#as different, but not sure how to do it. 
if [ "$y" -ge 0000 ] && [ "$y" -le 9999 ] 
then 
     #DO NOTHING 

#IF Y <= 50 && Y >= 0 
elif [ "$y" -le 50 ] && [ "$y" -ge 0 ] 
then 
     #DO SOMETHING 

#IF Y > 50 && Y <= 99 
elif [ "$y" -gt 50 ] && [ "$y" -le 99 ] 
then 
     #DO SOMETHING 
fi 

有沒有人有關於如何告訴我的任何提示腳本0001和1是兩個不同的東西?我認爲bash必須有一些東西來檢查輸入長度或什麼,但我找不到任何東西。

回答

1

Bash支持查找存儲在變量中的字符串的長度。

A=hello 
echo ${#A} # outputs "5" 

您可以使用此if語句中:

A=0001 
if [ ${#A} -ne 4 ]; then 
    # stuff done if not four digits 
fi 
1

請注意,bash會將-eq,-ne,-lt,-le,-gt或-ge的任何參數視爲數字。

如果你想將它們視爲一個字符串,使用=和!=

$ test 1 = 2; echo $? 
1 
$ test 1 = 1; echo $? 
0 
$ test 1 = 001; echo $? 
1 
$ 

注意如何1和001被認爲是不同的。願這能幫助你。

如果你真的想知道多長時間,請嘗試使用wc

$ echo -n abc | wc -c 
3 
$ y=0001 
$ echo -n $y | wc -c 
4 
$ test `echo -n $y | wc -c` -eq 4; echo $? 
0 
$ y=1 
$ test `echo -n $y | wc -c` -eq 4; echo $? 
1 
$ 

最後一種情況返回1通知我們,$y不長4個字符。

+0

不需要wc;如果y = 1000,$ {#y}將會是4 – 2010-11-07 04:42:30

+0

向你的bash-foo鞠躬。 :-) 謝謝!這會派上用場。 – Ashe 2010-11-07 05:01:01

1

我使用case識別4位數字:

case $y in 
([0-9][0-9][0-9][0-9]) 
    is_4_digits=yes;; 
(*) is_4_digits=no;; 
esac 

您做些什麼取決於您的要求 - 可能是你在'(*)'條款中做了所有事情;我在4位數字的情況下使用': OK'表示這種情況是OK的:

case $y in 
([0-9][0-9][0-9][0-9]) : OK;; 
(*) # ... do all the other work here ... 
    ;; 
esac