Bash Scripting仅留下4位数字

时间:2010-11-07 04:29:48

标签: bash scripting shell

编辑:已解决。谢谢大家!

我正在构建一个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必须有东西来检查输入长度或东西,但我找不到任何东西。

3 个答案:

答案 0 :(得分: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个字符。

答案 1 :(得分:1)

Bash支持查找存储在变量中的字符串的长度。

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

您可以在if语句中使用它:

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

答案 2 :(得分: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'表示这种情况是正常的:

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