侧边栏壁纸
Linux入门自学网博主等级

每日学一条Linux命令,终成Linux大神

  • 累计撰写 725 篇文章
  • 累计创建 143 个标签
  • 累计收到 0 条评论

目 录CONTENT

文章目录

Linux exit命令用法详解及实例:如何从shell中退出

Linux exit命令介绍

exit命令是一个内置命令,用于退出当前运行的shell。如果你的终端窗口有多个标签,那么这个命令会退出执行它的那个标签。exit命令可以接受一个参数[N],表示退出时返回的状态码。如果没有指定[N],那么返回的状态码就是最后一个执行的命令的状态码。

Linux exit命令适用的Linux版本

exit命令是一个通用的命令,适用于所有的Linux发行版,包括Ubuntu, CentOS, Debian, Fedora, RedHat等。由于它是一个内置命令,所以不需要安装任何额外的软件包。

Linux exit命令的基本语法

exit命令的语法格式如下:

exit [N]

其中,[N]是可选的参数,表示退出时返回的状态码。状态码是一个0到255之间的整数,通常用来表示程序的执行结果。一般来说,状态码为0表示成功,非0表示失败或错误。状态码可以在父shell中通过echo $?命令来查看。

Linux exit命令的常用选项或参数说明

exit命令没有选项,只有一个可选的参数[N]。如果没有指定[N],那么返回的状态码就是最后一个执行的命令的状态码。如果指定了[N],那么返回的状态码就是[N]。
以下是一些常见的退出状态代码及其含义:

0: 命令成功执行,没有错误。
1: 通用错误。这是最常用的退出代码,应该被用作各种杂项错误的捕获值。
2: shell内置命令的无效使用。内置命令的例子包括alias,echo,和printf。
126: 无法执行命令。这可能是因为权限问题或者命令不可执行。
127: 找不到命令。这可能是因为拼写错误或者PATH问题。
128+n: 程序在接收到一个信号后终止,它将返回一个等于128 + 信号编号的错误代码。例如,当我们通过键入Control-C终止一个程序时,我们实际上向它发送了一个SIGINT信号。这个信号的值是2。因此,程序将停止执行并返回一个值为128 + 2 = 130的退出代码。

Linux exit命令的实例

下面是一些使用exit命令的实例:

退出当前shell

如果你想退出当前的shell,只需要输入exit命令,然后按回车键即可。例如:

[linux@bashcommandnotfound.cn ~]$ exit

执行上面的命令后,终端窗口会关闭。

退出当前shell并返回指定的状态码

如果你想退出当前的shell,并返回一个指定的状态码,可以在exit命令后面加上一个整数参数。例如:

[linux@bashcommandnotfound.cn ~]$ exit 5

执行上面的命令后,终端窗口会关闭,并返回状态码5。你可以在父shell中通过echo $?命令来查看返回的状态码。例如:

[linux@bashcommandnotfound.cn ~]$ echo $?
5

在脚本中使用exit命令

如果你在编写一个shell脚本,你可以在脚本中使用exit命令来结束脚本的执行,并返回一个状态码。这样,你可以根据状态码来判断脚本是否执行成功或失败,或者传递一些信息给调用者。例如,你可以编写一个名为test.sh的脚本,内容如下:

#!/bin/bash
# test.sh: a simple shell script to demonstrate the use of exit command

echo "This is a test script."
read -p "Enter a number: " num
if [ $num -eq 10 ]; then
  echo "You entered 10."
  exit 0
else
  echo "You did not enter 10."
  exit 1
fi

在脚本中,我们使用read命令来读取用户输入的一个数字,然后判断是否等于10。如果等于10,我们输出"You entered 10.",并使用exit 0命令来退出脚本,并返回状态码0。如果不等于10,我们输出"You did not enter 10.",并使用exit 1命令来退出脚本,并返回状态码1。我们可以在终端中执行这个脚本,然后查看返回的状态码。例如:

[linux@bashcommandnotfound.cn ~]$ chmod +x test.sh
[linux@bashcommandnotfound.cn ~]$ ./test.sh
This is a test script.
Enter a number: 10
You entered 10.
[linux@bashcommandnotfound.cn ~]$ echo $?
0
[linux@bashcommandnotfound.cn ~]$ ./test.sh
This is a test script.
Enter a number: 5
You did not enter 10.
[linux@bashcommandnotfound.cn ~]$ echo $?
1

从上面的输出可以看出,当我们输入10时,脚本返回了状态码0,表示成功。当我们输入5时,脚本返回了状态码1,表示失败。

定义退出时执行的操作

如果你想在退出shell时执行一些操作,比如删除一些文件,或者输出一些信息,你可以使用trap命令来定义一个退出时的信号处理函数。trap命令的语法格式如下:

trap "COMMANDS" EXIT

其中,COMMANDS是你想在退出时执行的命令,可以是一条或多条,用分号分隔。EXIT是一个特殊的信号,表示shell退出时触发。例如,你可以使用下面的命令来定义一个退出时的操作:

[linux@bashcommandnotfound.cn ~]$ trap "echo 'Bye bye!'; rm test.txt" EXIT

这个命令表示在退出shell时,先输出"Bye bye!",然后删除test.txt文件。你可以在终端中测试这个命令的效果。例如:

[linux@bashcommandnotfound.cn ~]$ touch test.txt
[linux@bashcommandnotfound.cn ~]$ ls
test.txt  test.sh
[linux@bashcommandnotfound.cn ~]$ exit
Bye bye!
[linux@bashcommandnotfound.cn ~]$ ls
test.sh

从上面的输出可以看出,当我们退出shell时,先输出了"Bye bye!",然后删除了test.txt文件。

Linux exit命令的注意事项

  • exit命令只能退出当前运行的shell,不能退出其他的shell。如果你想退出所有的shell,你可以使用logout命令,或者按Ctrl+D组合键。
  • exit命令的参数[N]必须是一个0到255之间的整数,否则会报错。例如:
[linux@bashcommandnotfound.cn ~]$ exit 256
bash: exit: 256: numeric argument required
  • 如果你在执行exit命令时,有一些后台进程还在运行,那么shell会提示你是否真的要退出。你可以输入y或n来选择。例如:
[linux@bashcommandnotfound.cn ~]$ sleep 10 &
[1] 1234
[linux@bashcommandnotfound.cn ~]$ exit
There are stopped jobs.
exit
There are stopped jobs.
[linux@bashcommandnotfound.cn ~]$ y
bash: y: command not found
[linux@bashcommandnotfound.cn ~]$ exit
There are stopped jobs.
exit
There are stopped jobs.
[linux@bashcommandnotfound.cn ~]$ n
[linux@bashcommandnotfound.cn ~]$ 
  • 如果你在终端中输入了一个不存在的命令,那么shell会提示你bash: xxx: command not found,并返回状态码127。这时,你可以使用which命令来检查命令是否存在,或者使用yumapt命令来安装命令所需的软件包。例如:
[linux@bashcommandnotfound.cn ~]$ abc
bash: abc: command not found
[linux@bashcommandnotfound.cn ~]$ echo $?
127
[linux@bashcommandnotfound.cn ~]$ which abc
/usr/bin/which: no abc in (/usr/local/bin:/usr/bin:/usr/local/sbin:/usr/sbin)
[linux@bashcommandnotfound.cn ~]$ yum install abc
Loaded plugins: fastestmirror, langpacks
Loading mirror speeds from cached hostfile
 * base: mirrors.aliyun.com
 * extras: mirrors.aliyun.com
 * updates: mirrors.aliyun.com
No package abc available.
Error: Nothing to do
0

评论区