Bash Scripting仅留下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必须有东西来检查输入长度或东西,但我找不到任何东西。     
已邀请:
Bash支持查找存储在变量中的字符串的长度。
A=hello
echo ${#A}    # outputs "5"
您可以在if语句中使用它:
A=0001
if [ ${#A} -ne 4 ]; then
    # stuff done if not four digits
fi
    
请注意,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个字符长。     
我使用
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
    

要回复问题请先登录注册