LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 1608|回复: 15

if循环报错,No such file or directory。

[复制链接]
发表于 2007-5-15 09:37:29 | 显示全部楼层 |阅读模式
[root@telnet]# ./mytest.sh
3529
3623
: No such file or directory

[root@telnet]# cat mytest.sh
#!/bin/bash
/home/telnet/telnet > /home/telnet/num1
num1=`cat num1 |grep Total |head -1|awk '{print $5}'`;
echo $num1

sleep 5

/home/telnet/telnet > /home/telnet/num2
num2=`cat num2 |grep Total |head -1|awk '{print $5}'`;
echo $num2

if [ $num1 < $num2 ];
then
echo "$num1 less $num2"
fi
发表于 2007-5-15 10:05:58 | 显示全部楼层
改为 if [ "$num1" \< "$num2" ]试试
回复 支持 反对

使用道具 举报

 楼主| 发表于 2007-5-15 10:09:05 | 显示全部楼层
现在是可以了,但是为何echo显示不出 $num1的值呢?

[root@TENSTART telnet]# ./mytest.sh
4041
4158
less 4158
回复 支持 反对

使用道具 举报

发表于 2007-5-15 10:20:52 | 显示全部楼层
if [[ $num1 < $num2 ]];
---------
但我猜这个是你想要的:
if [ $num1 -lt $num2 ];
回复 支持 反对

使用道具 举报

 楼主| 发表于 2007-5-15 10:32:51 | 显示全部楼层
赫赫~ 我刚才用过-lt 不过报参数错误。。
integer expression expected

可是都是整数阿,所以我才无解了。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2007-5-15 10:33:38 | 显示全部楼层
Post by biinn
if [[ $num1 < $num2 ]];
---------
但我猜这个是你想要的:
if [ $num1 -lt $num2 ];


是,后来我想明白了,它把小于号当成了输入定向了
回复 支持 反对

使用道具 举报

 楼主| 发表于 2007-5-15 10:41:11 | 显示全部楼层
还有一个问题,我在下面加了else,之后为何1小于2的时候还是执行后面的kill那个脚本?

if [ "$num1" \< "$num2" ];
then
echo "$num1 less $num2"
/home/telnet/kill
else
echo "$num1 is error"
/home/telnet/kill
fi
回复 支持 反对

使用道具 举报

发表于 2007-5-15 12:57:56 | 显示全部楼层
Post by eddie_we
还有一个问题,我在下面加了else,之后为何1小于2的时候还是执行后面的kill那个脚本?

if [ "$num1" \< "$num2" ];
then
echo "$num1 less $num2"
/home/telnet/kill
else
echo "$num1 is error"
/home/telnet/kill
fi


if else 里面都写了/home/telnet/kill

另外如果做数字判断不要用if [ "$num1" \< "$num2" ]这种形式
这是通过ASCII码判断字符串,用[ -lt ]或者(())

eg.

  1. $ [ 1 \< 2 ] && echo "1 < 2"||echo "1 > 2"
  2. 1 < 2

  3. davistar@davi ~
  4. $ [ 10 \< 2 ] && echo "10 < 2"||echo "10 > 2"
  5. 10 < 2
复制代码


看看两者的结果你就明白了
回复 支持 反对

使用道具 举报

 楼主| 发表于 2007-5-15 18:38:15 | 显示全部楼层
Post by davi
if else 里面都写了/home/telnet/kill

另外如果做数字判断不要用if [ "$num1" \< "$num2" ]这种形式
这是通过ASCII码判断字符串,用[ -lt ]或者(())

eg.

  1. $ [ 1 \< 2 ] && echo "1 < 2"||echo "1 > 2"
  2. 1 < 2

  3. davistar@davi ~
  4. $ [ 10 \< 2 ] && echo "10 < 2"||echo "10 > 2"
  5. 10 < 2
复制代码


看看两者的结果你就明白了


我当时就没看到。。晕阿 - -! 多谢~

后来觉得那样麻烦,就把if改了,原来不知道需求后来才知道,只要两个数相等就说明有问题了,连else都省略了。赫赫
回复 支持 反对

使用道具 举报

 楼主| 发表于 2007-5-15 18:48:48 | 显示全部楼层
[root@telnet]# cat mytest.sh.bk
#!/bin/bash

num1=285862
echo $num1

num2=286344
echo $num2

if [ "$num1" -eq "$num2" ];
then
echo "$num1 = $num2"
fi

执行结果
[root@telnet]# ./mytest.sh.bk
285862
286344


但把-eq放到mytest.sh中,就会出现整数错误?

[root@telnet]# cat mytest.sh
#!/bin/bash
date > /home/telnet/time.txt
#/home/telnet/telnet > /home/telnet/num1
rm -rf /home/telnet/num1
cp /home/telnet/num2 /home/telnet/num1
num1=`cat /home/telnet/num1 |grep Total |head -1|awk '{print $5}'`
echo $num1

/home/telnet/telnet > /home/telnet/num2
num2=`cat /home/telnet/num2 |grep Total |head -1|awk '{print $5}'`;
echo $num2

if [ "$num1" -eq "$num2" ];
then
echo "$num1 = $num2"
/home/telnet/kill
killall -9 cam
/bin/cam
fi

结果
[root@TENSTART telnet]# ./mytest.sh.bk
285862
286344
: integer expression expected85862
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表