command1 && command2:其意思是command2只有在RV为0(true)的条件下执行。
command1 || command2:其意思是command2只有在RV为非0(false)的条件下执行。
来,以例子来说好了:
$ A=123 $ [ -n "$A" ] && echo "yes!it's ture." yes!it's ture. $ unset A $ [ -n "$A" ] && echo "yes!it's ture." $ [ -n "$A" ] || echo "no,it's NOT ture." no,it's NOT ture.
(注:[ -n string ]是测试string长度大于0则为true。)
上例的第一个&&命令行之所以会执行其右边的echo命令,是因为上一个test送回了0的RV值﹔但第二次就不会执行,因为test送回非0的结果…同理,||右边的echo会被执行,却正是因为左边的test送回非0所引起的。
事实上,我们在同一命令行中,可用多个&&或||来组建呢:
$ A=123 $ [ -n "$A" ] && echo "yes!it's ture." || echo "no,it's NOT ture." yes!it's ture. $ unset A $ [ -n "$A" ] && echo "yes!it's ture." || echo "no,it's NOT ture." no,it's NOT ture.
怎样,从这一刻开始,你是否觉得我们的shell是“很聪明”的呢?^_^ 好了,最后,布置一道习题给大家做做看...
下面的判断是:当$A被赋与值时,再看是否小于100,否则送出too big!:
$ A=123 $ [ -n "$A" ] && [ "$A" -lt 100 ] || echo 'too big!' too big!
若我将A取消,照理说,应该不会送文字才对啊(因为第一个条件就不成立了)…
$ unset A $ [ -n "$A" ] && [ "$A" -lt 100 ] || echo 'too big!' too big!










