linux shell脚本:while循环中调用另一个脚本遇到exit为什么会跳出循环,且继续执行循环后的程序? 5
这里给出了for和while两种循环,及两种不同的结果:#for循环如下,a.sh中for循环内调用b.sh,如下:#a.sh如下:#!/bin/sh-xforiin$(...
这里给出了for和while两种循环,及两种不同的结果:
#for循环如下,a.sh中for循环内调用b.sh,如下:
#a.sh如下:
#! /bin/sh -x
for i in $(seq 10)
do
echo "loop $i"
source b.sh
done
echo "end loop $i"
#b.sh如下
#! /bin/sh -x
echo "b.sh is process"
exit 1
#结果如下:
loop 1
b.sh is process
#while循环如下,a.sh中while循环内调用b.sh,其中all_file.txt中有大量文件目录
#a.sh如下:
#! /bin/sh
cat all_file.txt | while read line_a
do
echo "loop $i"
. b.sh
done
echo "end loop"
#b.sh如下
#! /bin/sh -x
echo "b.sh is process"
exit 1
结果如下:
loop
b.sh is process
end loop
问题:for直接跳出整个脚本,和baidu里搜的exit解答一样;
但是while循环只是跳出循环,继续执行循环后的程序。
请大神给出答案。
对b.sh中的exit改成#exit后可以继续循环;
能否给出不改动b.sh,还能循环。 展开
#for循环如下,a.sh中for循环内调用b.sh,如下:
#a.sh如下:
#! /bin/sh -x
for i in $(seq 10)
do
echo "loop $i"
source b.sh
done
echo "end loop $i"
#b.sh如下
#! /bin/sh -x
echo "b.sh is process"
exit 1
#结果如下:
loop 1
b.sh is process
#while循环如下,a.sh中while循环内调用b.sh,其中all_file.txt中有大量文件目录
#a.sh如下:
#! /bin/sh
cat all_file.txt | while read line_a
do
echo "loop $i"
. b.sh
done
echo "end loop"
#b.sh如下
#! /bin/sh -x
echo "b.sh is process"
exit 1
结果如下:
loop
b.sh is process
end loop
问题:for直接跳出整个脚本,和baidu里搜的exit解答一样;
但是while循环只是跳出循环,继续执行循环后的程序。
请大神给出答案。
对b.sh中的exit改成#exit后可以继续循环;
能否给出不改动b.sh,还能循环。 展开
3个回答
展开全部
exit是在被调用的脚本里面,肯定会退出被调用的脚本了。如果不想继续执行while循环后面的程序可以在do后面的条件上加上break
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
[root@localhost ~]# cat a.sh
#! /bin/sh
while true
do
echo "loop "
#source ./b.sh
exit 1
#. ./b.sh
done
echo "end loop"
[root@localhost ~]# sh -x a.sh
+ true
+ echo 'loop '
loop
+ exit 1
可以看出while也是可以exit的
不是while的错,是read的问题,exit 1是给了read,read读取不到东西结束循环。。。所以还会继续执行while后面的echo
更多追问追答
追问
那请问,有办法不修改b.sh中的文件内容,还能继续循环么?
追答
没懂你的意思,我解释的是
cat all_file.txt | while read line_a
和
while true
对于exit 1系统做出的处理。。
和修改b.sh又是什么???
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
是source与.(点)的区别,把a.sh里的source b.sh改成./b.sh(b.sh的完整路径)就有了
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询