分页: 1 / 1
脚本中IF判断语句的几个问题
发表于 : 2011-08-05 21:07
由 perseawe
代码: 全选
#!/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后面的语句...
新手求救应该怎么办....
Re: 脚本中IF判断语句的几个问题
发表于 : 2011-08-05 21:14
由 wiewi
if [ "` diff ./test.out ./test2.out`"==" " ];
判断条件后面的" "中间不要有空格,如果diff的两个文件相同,输出是空,不是空格,另外可以用 -n / -z 判断是否为空
Re: 脚本中IF判断语句的几个问题
发表于 : 2011-08-05 21:20
由 cjxgm
== 两边要有空格!
代码: 全选
if [ "`diff ./test.out ./test2.out`" == "" ];
Re: 脚本中IF判断语句的几个问题
发表于 : 2011-08-05 21:23
由 perseawe
谢谢上面两位大神,我果然是个半秃....
还是脚本写的不够熟练,但是觉得ubuntu真是太好用了,特别是用GEANY写程序,真心好用。
Re: 脚本中IF判断语句的几个问题
发表于 : 2011-08-05 21:28
由 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]: 没有那个文件或目录
Re: 脚本中IF判断语句的几个问题
发表于 : 2011-08-05 21:59
由 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后面的...
Re: 脚本中IF判断语句的几个问题
发表于 : 2011-08-05 22:06
由 wiewi
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)
记得以前学的时候,书上讲是应该有空格的,我是看到楼主原本的代码等号两边没有空格,在自己这边试了试竟然可以运行
Re: 脚本中IF判断语句的几个问题
发表于 : 2011-08-06 2:42
由 fnan
==两边必须有空格,否则成字符串拼接了,永远为真。
条件可以写成 if [ ! "`diff ./test.out ./test2.out`" ]; #意思是: 如果空就。。。。
Re: 脚本中IF判断语句的几个问题
发表于 : 2011-08-06 11:42
由 MaskRay
代码: 全选
if diff -q file1 file2; then
echo identical
fi
更好吧,如果不想看到错误,请用 > /dev/null
还有你的循环,写全测试数据是很烦的
代码: 全选
for ((i=0;i<5;i++)); do done
更简单
更加灵活的方式是:
代码: 全选
for i in data/a.*; do echo $i ${i/%in/out}; done
Re: 脚本中IF判断语句的几个问题
发表于 : 2011-08-06 15:52
由 perseawe
对...像LS这样写更好...
Re: 脚本中IF判断语句的几个问题
发表于 : 2011-08-07 21:50
由 fnan
另一种循环简单方法:
for i in {1..10};do;done
for i in data/a.*; do echo $i ${i/%in/out}; done
按lz的脚本,要先运行三个文件,得到两个文件,重复十次,那么这个是做什么的?