Linux exit命令不起任何作用
我是Linux新手,正在尝试创建一个简单的程序来检查用户是否存在,如果存在-退出终端,如果不存在-创建它。我想除了离开航站楼,我什么都做了 这是我目前的代码: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
#!/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发表了一条评论(我想现在删除了,因为不必要的冗长),这似乎表明了对这个答案的满意。