你可能遇到过很多情况,在某些不方便的情况下,你不得不退出你的bash脚本。有许多方法可以退出bash脚本,即在编写bash脚本时退出,在执行时退出,或者在运行时退出。在编写bash脚本时退出的许多已知方法之一是简单的快捷键,即 "Ctrl+X"。而在运行时,你可以用 "Ctrl+Z "退出代码。本指南将展示如何在执行时使用不同的退出条款退出批处理脚本。让我们先从Ubuntu 20.04系统中登录,用 "Ctrl+Alt+T "打开shell。
例子01:使用退出0
我们在这个例子中利用的第一个方法是在bash脚本中使用 "退出 "语句。在 "touch "命令的帮助下,在shell中创建一个新文件,并在任何编辑器中打开它。
众所周知,read语句是用来获取用户的输入的。在这里,它将在运行时获取整数值并将其保存到变量 "x "中。if "语句一直在检查一个条件。如果用户输入的 "x "的值等于5,它将通过echo语句显示该数字被匹配。这里使用了 "exit 0 "子句。在执行完 "echo "语句后,bash脚本将被退出,由于 "exit 0",将不再执行。否则,如果条件不满足,"if "语句之外的 "echo "语句将被执行。
在shell中的bash查询的帮助下运行你的bash文件。用户添加了4作为输入。由于4不等于5,它不会运行 "if "语句的 "then "部分。所以,不会发生突然退出的情况。另一方面,在 "if "语句之外执行的echo语句指出 "Number doesn't match...",程序在此结束。
$ bash bash.sh
用bash命令再次运行同样的代码。这次用户添加了5。由于5满足了条件,在 "then "子句中的 "echo "语句被执行。之后,由于使用了 "exit 0",程序迅速停止。
$ bash bash.sh
例02:使用exit
与其使用 "exit 0",你可以在bash脚本中简单地使用 "exit "来退出代码。因此,打开同样的文件并更新你的代码。这里只改变了 "exit "子句,也就是用 "exit "代替。整个文件保持不变。让我们先用 "Ctrl+S "保存代码,用 "Crl+X "退出。让我们来执行它,看看它的效果是否与 "exit 1 "子句的效果一样。
利用所附截图中的命令,在终端运行bash文件 "bash.sh"。用户输入的数值是 "6",它没有满足条件。因此,编译器忽略了 "if "语句的 "then "子句,而在 "if "语句之外执行echo子句。
$ bash bash.sh
再次运行同一文件。这一次,用户添加了5作为满足条件。因此bash脚本在执行了 "if "语句中的 "echo "子句后立即退出。
$ bash bash.sh
例子03:使用exit 1
你也可以使用 "exit "子句来退出bash脚本,同时在运行时向它说明1。所以,打开同一个文件,像我们之前做的那样更新你的代码。唯一的变化是 "exit 1 "而不是 "exit "或 "exit 0"。保存你的代码并通过 "Ctrl+S "和 "Ctrl+X "退出编辑器。
在第一次执行时,用户添加了6作为输入。条件不满足,"if "语句内的命令不会被执行。所以,没有发生突然退出的情况。
$ bash bash.sh
在第二次尝试中,用户添加了5来满足条件。所以,"if "语句中的命令被执行,程序在运行 "echo "子句后退出。
$ bash bash.sh
例子04
让我们利用bash脚本中的 "exit 1 "子句来检查不同的情况。因此,我们更新了同一文件的代码。在bash支持之后,"if "语句已经被初始化,以检查当前登录的用户,即 "Linux "是否为根用户。如果条件满足,"then "子句中的echo语句将被执行,而程序将在此退出。如果当前登录的账户是根用户,它将继续执行 "if "语句之外的语句。程序将继续从一个用户那里获得两个输入,并计算两个整数的总和。计算出的 "总和 "将被显示出来,然后程序将退出。
由于 "Linux "账户不是我们Ubuntu 20.04的根用户,这段代码的执行只执行了 "if "语句和它之间的条款。在这之后程序就退出了。
$ bash bash.sh
例子05:使用 "set -e "内置程序
众所周知,"set -e "内置程序可以在遇到非零状态时退出程序。所以,我们添加了3个双胞胎命名的函数,每个函数中都有1个echo语句和一个返回状态子句。在调用前两个方法之前,"set +e "被初始化,之后使用 "set -e",并在之后调用两个函数。
执行时,show1和show2函数的回声语句都会运行,程序不会退出。而在 "set -e "之后,程序在执行show2()方法的echo语句后退出,因为它遇到了 "return 1"。此后show3方法将不会被调用。
运行这段代码后,我们得到了预期的输出。在遇到返回1的状态时,程序没有执行 "show3() "方法就停止了。
$ bash bash.sh
总结
本指南涵盖了在编写、执行或运行任何bash脚本时退出的所有可能方法。因此,试着实现本文所涉及的每个例子,以获得更清晰的理解。