+ -
当前位置:首页 → 问答吧 → 求脚本!!!!

求脚本!!!!

时间:2011-08-05

来源:互联网

代码:
#!/bin/bash
for num in 1 2 3 4 5 6 7 8 9 10
do
   ./testa
   ./testb
   ./testc
   echo "Running $num"
   if [ "` diff ./test.out ./test2.out`"=="" ];
     then echo "$num is OK"
     else break
   fi
done

我写了这么一个脚本,用意是运行./testa得到一个文件后分别用./testb和./testc去处理得到./test.out和./test2.out,然后使用条件判断语句来判断是否相同,如果相同就在屏幕上打印一个Ok语句,否则就跳出。
但是我在测试的时候发现无论怎么样,它都仅执行then后面的语句...
新手求救应该怎么办....

作者: perseawe   发布时间: 2011-08-05

引用:
if [ "` diff ./test.out ./test2.out`"==" " ];

判断条件后面的" "中间不要有空格,如果diff的两个文件相同,输出是空,不是空格,另外可以用 -n / -z 判断是否为空

作者: wiewi   发布时间: 2011-08-05

== 两边要有空格!
代码:
if [ "`diff ./test.out ./test2.out`" == "" ];

作者: cjxgm   发布时间: 2011-08-05

谢谢上面两位大神,我果然是个半秃....
还是脚本写的不够熟练,但是觉得ubuntu真是太好用了,特别是用GEANY写程序,真心好用。

作者: perseawe   发布时间: 2011-08-05

cjxgm 写道:
== 两边要有空格!
代码:
if [ "`diff ./test.out ./test2.out`" == "" ];

==两边的不要可以,但是[ 右边的和 ] 左边的空格必须有
引用:
[liwei@Arch ~] $ if [ "$HOME"='/home/liwei' ];then echo "OK"; fi
OK
[liwei@Arch ~] $ if ["$HOME"='/home/liwei'];then echo "OK"; fi
bash: [/home/liwei=/home/liwei]: 没有那个文件或目录

作者: wiewi   发布时间: 2011-08-05

wiewi 写道:
cjxgm 写道:
== 两边要有空格!
代码:
if [ "`diff ./test.out ./test2.out`" == "" ];

==两边的不要可以,但是[ 右边的和 ] 左边的空格必须有
引用:
[liwei@Arch ~] $ if [ "$HOME"='/home/liwei' ];then echo "OK"; fi
OK
[liwei@Arch ~] $ if ["$HOME"='/home/liwei'];then echo "OK"; fi
bash: [/home/liwei=/home/liwei]: 没有那个文件或目录

在11.04下测试,==两边必须要有空格,否则就仅执行then后面的...

作者: perseawe   发布时间: 2011-08-05

perseawe 写道:
wiewi 写道:
cjxgm 写道:
== 两边要有空格!
代码:
if [ "`diff ./test.out ./test2.out`" == "" ];

==两边的不要可以,但是[ 右边的和 ] 左边的空格必须有
引用:
[liwei@Arch ~] $ if [ "$HOME"='/home/liwei' ];then echo "OK"; fi
OK
[liwei@Arch ~] $ if ["$HOME"='/home/liwei'];then echo "OK"; fi
bash: [/home/liwei=/home/liwei]: 没有那个文件或目录

在11.04下测试,==两边必须要有空格,否则就仅执行then后面的...

不知道,我是arch,bash 4.2.10(2)-release (i686-pc-linux-gnu)
记得以前学的时候,书上讲是应该有空格的,我是看到楼主原本的代码等号两边没有空格,在自己这边试了试竟然可以运行

作者: wiewi   发布时间: 2011-08-05

代码:
#!/bin/bash
for num in 1 2 3 4 5 6 7 8 9 10
do
   ./testa
   ./testb
   ./testc
   echo "Running $num"
   if [ "` diff ./test.out ./test2.out`"=="" ];
     then echo "$num is OK"
     else break
   fi
done

我写了这么一个脚本,用意是运行./testa得到一个文件后分别用./testb和./testc去处理得到./test.out和./test2.out,然后使用条件判断语句来判断是否相同,如果相同就在屏幕上打印一个Ok语句,否则就跳出。
但是我在测试的时候发现无论怎么样,它都仅执行then后面的语句...
新手求救应该怎么办....

作者: perseawe   发布时间: 2011-08-05

引用:
if [ "` diff ./test.out ./test2.out`"==" " ];

判断条件后面的" "中间不要有空格,如果diff的两个文件相同,输出是空,不是空格,另外可以用 -n / -z 判断是否为空

作者: wiewi   发布时间: 2011-08-05

== 两边要有空格!
代码:
if [ "`diff ./test.out ./test2.out`" == "" ];

作者: cjxgm   发布时间: 2011-08-05

谢谢上面两位大神,我果然是个半秃....
还是脚本写的不够熟练,但是觉得ubuntu真是太好用了,特别是用GEANY写程序,真心好用。

作者: perseawe   发布时间: 2011-08-05

cjxgm 写道:
== 两边要有空格!
代码:
if [ "`diff ./test.out ./test2.out`" == "" ];

==两边的不要可以,但是[ 右边的和 ] 左边的空格必须有
引用:
[liwei@Arch ~] $ if [ "$HOME"='/home/liwei' ];then echo "OK"; fi
OK
[liwei@Arch ~] $ if ["$HOME"='/home/liwei'];then echo "OK"; fi
bash: [/home/liwei=/home/liwei]: 没有那个文件或目录

作者: wiewi   发布时间: 2011-08-05

wiewi 写道:
cjxgm 写道:
== 两边要有空格!
代码:
if [ "`diff ./test.out ./test2.out`" == "" ];

==两边的不要可以,但是[ 右边的和 ] 左边的空格必须有
引用:
[liwei@Arch ~] $ if [ "$HOME"='/home/liwei' ];then echo "OK"; fi
OK
[liwei@Arch ~] $ if ["$HOME"='/home/liwei'];then echo "OK"; fi
bash: [/home/liwei=/home/liwei]: 没有那个文件或目录

在11.04下测试,==两边必须要有空格,否则就仅执行then后面的...

作者: perseawe   发布时间: 2011-08-05

perseawe 写道:
wiewi 写道:
cjxgm 写道:
== 两边要有空格!
代码:
if [ "`diff ./test.out ./test2.out`" == "" ];

==两边的不要可以,但是[ 右边的和 ] 左边的空格必须有
引用:
[liwei@Arch ~] $ if [ "$HOME"='/home/liwei' ];then echo "OK"; fi
OK
[liwei@Arch ~] $ if ["$HOME"='/home/liwei'];then echo "OK"; fi
bash: [/home/liwei=/home/liwei]: 没有那个文件或目录

在11.04下测试,==两边必须要有空格,否则就仅执行then后面的...

不知道,我是arch,bash 4.2.10(2)-release (i686-pc-linux-gnu)
记得以前学的时候,书上讲是应该有空格的,我是看到楼主原本的代码等号两边没有空格,在自己这边试了试竟然可以运行

作者: wiewi   发布时间: 2011-08-05

代码:
#!/bin/bash
for num in 1 2 3 4 5 6 7 8 9 10
do
   ./testa
   ./testb
   ./testc
   echo "Running $num"
   if [ "` diff ./test.out ./test2.out`"=="" ];
     then echo "$num is OK"
     else break
   fi
done

我写了这么一个脚本,用意是运行./testa得到一个文件后分别用./testb和./testc去处理得到./test.out和./test2.out,然后使用条件判断语句来判断是否相同,如果相同就在屏幕上打印一个Ok语句,否则就跳出。
但是我在测试的时候发现无论怎么样,它都仅执行then后面的语句...
新手求救应该怎么办....

作者: perseawe   发布时间: 2011-08-05

引用:
if [ "` diff ./test.out ./test2.out`"==" " ];

判断条件后面的" "中间不要有空格,如果diff的两个文件相同,输出是空,不是空格,另外可以用 -n / -z 判断是否为空

作者: wiewi   发布时间: 2011-08-05

== 两边要有空格!
代码:
if [ "`diff ./test.out ./test2.out`" == "" ];

作者: cjxgm   发布时间: 2011-08-05

谢谢上面两位大神,我果然是个半秃....
还是脚本写的不够熟练,但是觉得ubuntu真是太好用了,特别是用GEANY写程序,真心好用。

作者: perseawe   发布时间: 2011-08-05

cjxgm 写道:
== 两边要有空格!
代码:
if [ "`diff ./test.out ./test2.out`" == "" ];

==两边的不要可以,但是[ 右边的和 ] 左边的空格必须有
引用:
[liwei@Arch ~] $ if [ "$HOME"='/home/liwei' ];then echo "OK"; fi
OK
[liwei@Arch ~] $ if ["$HOME"='/home/liwei'];then echo "OK"; fi
bash: [/home/liwei=/home/liwei]: 没有那个文件或目录

作者: wiewi   发布时间: 2011-08-05

wiewi 写道:
cjxgm 写道:
== 两边要有空格!
代码:
if [ "`diff ./test.out ./test2.out`" == "" ];

==两边的不要可以,但是[ 右边的和 ] 左边的空格必须有
引用:
[liwei@Arch ~] $ if [ "$HOME"='/home/liwei' ];then echo "OK"; fi
OK
[liwei@Arch ~] $ if ["$HOME"='/home/liwei'];then echo "OK"; fi
bash: [/home/liwei=/home/liwei]: 没有那个文件或目录

在11.04下测试,==两边必须要有空格,否则就仅执行then后面的...

作者: perseawe   发布时间: 2011-08-05

perseawe 写道:
wiewi 写道:
cjxgm 写道:
== 两边要有空格!
代码:
if [ "`diff ./test.out ./test2.out`" == "" ];

==两边的不要可以,但是[ 右边的和 ] 左边的空格必须有
引用:
[liwei@Arch ~] $ if [ "$HOME"='/home/liwei' ];then echo "OK"; fi
OK
[liwei@Arch ~] $ if ["$HOME"='/home/liwei'];then echo "OK"; fi
bash: [/home/liwei=/home/liwei]: 没有那个文件或目录

在11.04下测试,==两边必须要有空格,否则就仅执行then后面的...

不知道,我是arch,bash 4.2.10(2)-release (i686-pc-linux-gnu)
记得以前学的时候,书上讲是应该有空格的,我是看到楼主原本的代码等号两边没有空格,在自己这边试了试竟然可以运行

作者: wiewi   发布时间: 2011-08-05