Linux exit命令不起任何作用

Linux exit命令不起任何作用,linux,bash,Linux,Bash,我是Linux新手,正在尝试创建一个简单的程序来检查用户是否存在,如果存在-退出终端,如果不存在-创建它。我想除了离开航站楼,我什么都做了 这是我目前的代码: #!/bin/bash user_name=newUser if [ $(getent passwd $user_name) ] then echo "User $user_name already exists!" exit else echo "The user $user_name doesn't exis

我是Linux新手,正在尝试创建一个简单的程序来检查用户是否存在,如果存在-退出终端,如果不存在-创建它。我想除了离开航站楼,我什么都做了

这是我目前的代码:

#!/bin/bash
user_name=newUser

if [ $(getent passwd $user_name) ]
then
    echo "User $user_name already exists!"
    exit
else
    echo "The user $user_name doesn't exist and will be added"
    sudo useradd -d /home/mint/newUser $user_name
fi
编辑:正如我所说,我是Linux新手。是否有人可以编辑我的代码并发布它,我需要将其添加到脚本中,也许我可以使用while函数关闭它?

这已在上得到回答。我将在这里总结:

您可能已经注意到,在脚本中,
exit
将只退出当前脚本

一种用户友好的方法是使用
exit
命令设置合适的返回代码并调用脚本,如
/&&exit

如果你真的想要艰难的方式,使用

kill -9 $PPID

它将尝试终止封闭进程。

退出命令只会退出当前脚本。如果要退出终端,则需要退出(或终止)在该终端中运行的程序

实现这一点的常用方法是使想要退出的进程作为交互式shell中的函数运行

add_user () { /path/to/your/script "$@" || exit; }
不过,在这种情况下,我只建议您保持脚本的原样,让用户决定是否关闭终端

顺便说一下,这个结构

if [ $(command) ]
如果
命令
的输出为非空字符串,则为真。从
命令检查退出代码的正确方法是

if command
如果您不希望调用用户看到来自
命令的任何输出,则可以使用输出重定向

上述函数还要求scripit以显式错误退出;可能将其更改为
exit 1
,以明确地将错误条件传回调用方

#!/bin/bash
# First parameter is name of user to add
user_name=$1

# Quote variable; examine exit code
if getent passwd "$user_name" >/dev/null 2>&1
then
    # Notice addition of script name and redirect to stderr
    echo "$0: User $user_name already exists!" >&2
     # Explicitly exit with nonzero exit code
    exit 1
else
    # script name & redirect as above
    echo "$0: The user $user_name doesn't exist and will be added" >&2
    # Quote argument
    sudo useradd -d /home/mint/newUser "$user_name"
fi

退出终端的命令或脚本通常不是一个好主意,除非它的行为有很好的文档记录,并且所有用户都真正了解它。如果我运行了一个命令,而终端窗口刚刚为我关闭(特别是在它写了一些我没有时间看到的东西之后),这会让我非常生气,不再使用该命令。我正在查看一些问题,我现在正在解决的问题是,如果用户存在,我希望退出该程序。也许我可以附和一下,问题就要解决了,然后再解决。它是脚本的一部分。退出程序是可以的,并且已经是您的代码所做的。除非您知道其他信号不起作用,否则不要使用
kill-9
。不必要使用<代码> -9 阻止受害者进行清理操作——它可能会产生比你最初解决的问题更大的问题。是的,这是在ASKUntutuo网站上的原始帖子中提到的。如果这个答案解决了你的问题,请考虑接受它。更严格地说,这回答了原来的问题吗?@Sami这个问题不是很清楚,但OP发表了一条评论(我想现在删除了,因为不必要的冗长),这似乎表明了对这个答案的满意。