shell的条件判断

重复贴和参考价值不大的帖子,版主维护
回复
gbluo
帖子: 33
注册时间: 2008-11-17 14:13
送出感谢: 0
接收感谢: 0

shell的条件判断

#1

帖子 gbluo » 2008-12-07 7:56

最近在学shell,到现在对shell的条件判断还是有点迷糊:(原来写错了,现在改过来。)
代码1:

代码: 全选

declare -i a=1
echo "Input an integer please:"
read b
if [ $a < $b ];then
echo "a<b"
else
echo "a>b"
fi

运行后得出的结果是:
Input an integer please:
2
po.sh: line 7: 2: 没有该文件或目录
a>b

代码2:

代码: 全选

declare -i a=1
echo "Input an integer please:"
read b
if [ $a -lt $b ];then
echo "a<b"
else
echo "a>b"
fi

运行后得出的结果是:
Input an integer please:
3
a<b

我就是搞不清楚:小于号“<"到底怎么用才对,为什么“<“和“-lt"是同一个意思却得到不同的结果。
拜托,各位帮帮忙,帮我解决一下。[list=]
[/list]
上次由 gbluo 在 2008-12-07 10:09,总共编辑 2 次。
aerofox
帖子: 1453
注册时间: 2008-05-24 8:30
送出感谢: 2 次
接收感谢: 31 次

Re: vi上的条件判断

#2

帖子 aerofox » 2008-12-07 8:50

你确认那是vi吗?应该先搞清楚在学什么吧。
gbluo
帖子: 33
注册时间: 2008-11-17 14:13
送出感谢: 0
接收感谢: 0

Re: vi上的条件判断

#3

帖子 gbluo » 2008-12-07 10:07

aerofox 写了:你确认那是vi吗?应该先搞清楚在学什么吧。

啊,是我的错,我是说用vi编shell,嘿嘿。。。
gbluo
帖子: 33
注册时间: 2008-11-17 14:13
送出感谢: 0
接收感谢: 0

Re: shell的条件判断

#4

帖子 gbluo » 2008-12-07 10:10

不过,貌似,我不喜欢别人用老气横秋的语气跟我说话。
头像
BigSnake.NET
帖子: 12522
注册时间: 2006-07-02 11:16
来自: 廣州
送出感谢: 0
接收感谢: 7 次
联系:

Re: shell的条件判断

#5

帖子 BigSnake.NET » 2008-12-07 11:01

RTFM...

代码: 全选

       string1 < string2
              True if string1 sorts before string2  lexicographically  in  the
              current locale.

       string1 > string2
              True  if  string1  sorts  after string2 lexicographically in the
              current locale.

       arg1 OP arg2
              OP is one of -eq, -ne, -lt, -le, -gt, or -ge.  These  arithmetic
              binary  operators return true if arg1 is equal to, not equal to,
              less than, less than or equal to, greater than, or greater  than
              or  equal  to arg2, respectively.  Arg1 and arg2 may be positive
              or negative integers.


至于那个找不到文件的问题

代码: 全选

[: [ arg... ]
    This is a synonym for the "test" builtin, but the last
    argument must be a literal `]', to match the opening `['.

所以那个 < 被解释成重定向了, 应该写 '<'
^_^ ~~~
要理解递归,首先要理解递归。

地球人都知道,理论上,理论跟实际是没有差别的,但实际上,理论跟实际的差别是相当大滴。
aerofox
帖子: 1453
注册时间: 2008-05-24 8:30
送出感谢: 2 次
接收感谢: 31 次

Re: shell的条件判断

#6

帖子 aerofox » 2008-12-07 11:13

既然是shell,我还知道一点点。开始我还真以为是学vim脚本编程,但看着脚本又不太像vim的脚本,所以找楼主确认一下。
<和-lt是不样的,在[]中应该用-lt比较两个数值。如果是bash,也可以用[[ ]],这里面可以用<,但是比较的是字符串。
比较:

代码: 全选

[[ 123 < 23 ]] && echo ok


代码: 全选

[[ 123 -lt 23 ]] && echo ok

在单个[]的表达式中,<当作了普通的重定向符。

代码: 全选

[ $a < $b ]

相当于

代码: 全选

test $a < $b;

如果$b正好是一个可读文件的文件名,你的程序将会输出

代码: 全选

a<b

你可以试试:

代码: 全选

touch 0

再运行你的程序,提示输入时输入

代码: 全选

0
aerofox
帖子: 1453
注册时间: 2008-05-24 8:30
送出感谢: 2 次
接收感谢: 31 次

Re: shell的条件判断

#7

帖子 aerofox » 2008-12-07 11:19

跟5楼学会了在[]中要吧用转义的<,不过还是字符串比较,不是数值比较。
gbluo
帖子: 33
注册时间: 2008-11-17 14:13
送出感谢: 0
接收感谢: 0

Re: shell的条件判断

#8

帖子 gbluo » 2008-12-08 7:07

谢谢aerofox.和BigSnake.NET.
gbluo
帖子: 33
注册时间: 2008-11-17 14:13
送出感谢: 0
接收感谢: 0

Re: shell的条件判断

#9

帖子 gbluo » 2008-12-08 7:38

gbluo 写了:不过,貌似,我不喜欢别人用老气横秋的语气跟我说话。

I am sorry for my roudness!Thank you for your assistance.
回复

回到 “归档贴”