shell:为啥循环内调用脚本,遇到exit会退出循环?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了shell:为啥循环内调用脚本,遇到exit会退出循环?相关的知识,希望对你有一定的参考价值。

a.sh文件中while循环内需要调用b.sh,但是b.sh中存在exit命令行;执行a.sh之后,会跳出循环;
注:是跳出循环,不是read读空问题。

#a.sh文件如下:
#! /bin/sh
while true
do
echo "loop $i"
. b.sh
echo "loop 100"
done
echo "end loop"

#b.sh文件如下:
#! /bin/sh -x
echo "b.sh is process"
exit 0
echo "B.SH is process"

结果如下:
loop
b.sh is process
end loop

请问大神,有没有办法不跳出循环,继续执行循环内容?
注:不能改动b.sh文件,因为该文件是系统文件。

参考技术A [root@localhost ~]# cat a.sh 
#! /bin/sh
while true
do
  echo "loop "
         . ./b.sh
        echo "loop 100"
done
echo "end loop"
[root@localhost ~]# cat b.sh 
#!/bin/sh -x
echo "b.sh is process"
exit 0
echo "B.SH is process"
[root@localhost ~]# sh a.sh 
loop 
b.sh is process

我的结果是正常的。。。

追问

不好意思,当while true前面加cat 某个txt时,就是跳出循环了。

不过我想知道的是:
有没有办法不跳出循环,继续执行循环内容?
注:不能改动b.sh文件,因为该文件是系统文件。

break跳出循环continue结束本次循环exit退出整个脚本

break跳出循环
脚本

[[email protected] shell]# vim break.sh

#!/bin/bash
for i in `seq 1 5`
do
  echo $i
  if [ $i -eq 3 ]
  then
      break
  fi
  echo $i
done
echo jiesu

执行结果

[[email protected] shell]# sh break.sh
1
1
2
2
3
jiesu

continue结束本次循环
忽略continue之下的代码,直接进行下一次循环
脚本

[[email protected] shell]# vim continue.sh

#!/bin/bash
for i in `seq 1 5`
do
  if [ $i -eq 3 ]
  then
      continue
  fi
  echo $i
done
echo jiesu

执行结果

[[email protected] shell]# sh continue.sh
1
2
4
5
jiesu

exit退出整个脚本
脚本

[[email protected] shell]# vim exit.sh

#!/bin/bash
for i in `seq 1 5`
do
  echo $i
  if [ $i -eq 3 ]
  then
      exit
  fi
  echo $i
done
echo jiesu

执行结果

[[email protected] shell]# sh exit.sh
1
1
2
2
3

以上是关于shell:为啥循环内调用脚本,遇到exit会退出循环?的主要内容,如果未能解决你的问题,请参考以下文章

[转帖]Shell脚本中的break continue exit return

为啥 sys.exit() 在 Python 的线程内调用时不退出?

for循环while循环break循环continue结束本次循环exit退出整个脚本

shell3

break跳出循环continue结束本次循环exit退出整个脚本

for循环,while循环,break跳出循环,continue结束本次循环,exit直接退出脚本