编辑:已解决。谢谢大家!
我正在构建一个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必须有东西来检查输入长度或东西,但我找不到任何东西。
答案 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