编辑:解决。谢谢大家!
我正在构建一个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必须有一些东西来检查输入长度或其他东西,但我找不到任何东西。
发布于 2010-11-07 04:45:05
Bash支持查找存储在变量中的字符串的长度。
A=hello
echo ${#A} # outputs "5"您可以在if语句中使用该语句:
A=0001
if [ ${#A} -ne 4 ]; then
# stuff done if not four digits
fi发布于 2010-11-07 04:35:31
请注意,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个字符。
发布于 2010-11-07 05:08:14
我会用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 ...
;;
esachttps://stackoverflow.com/questions/4116488
复制相似问题