Linux 退出命令什么都不做

标签 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 exist and will be added"
    sudo useradd -d /home/mint/newUser $user_name
fi

编辑:正如我所说,我是 Linux 新手。有人可以编辑我的代码并发布它,我需要将它添加到脚本中,也许我可以用 while 函数关闭它?

最佳答案

exit 命令只是退出当前脚本。如果您想退出终端,您需要退出(或以其他方式终止)正在该终端中运行的程序。

实现此目的的一种常见方法是让想要退出的进程作为交互式 shell 中的函数运行。

add_user () { /path/to/your/script "$@" || exit; }

不过,在这种情况下,我只是建议您保持脚本原样,并将其留给用户来决定他们是否要关闭终端。

顺便说一句,构造

if [ $(command) ]

如果 command 的输出是非空字符串,则为真。从 command 检查退出代码的正确方法很简单

if command

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

上面的函数还要求您的脚本以显式错误退出;可能将其更改为 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

关于Linux 退出命令什么都不做,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53594581/

相关文章:

shell - 将参数传递给 bash 中的别名

c++ - 如何在我的 C++ 程序中访问 `addr2line` 功能?

linux - 与 CakePHP 的符号链接(symbolic link)

c++ - dlclose() 不适用于工厂函数和函数中的复杂静态?

linux - 如何使用 ssh 打开监视 Raspbian/Raspberry?

bash - 右文本对齐 - bash

linux - nginx工作进程对于单CPU来说最好有1个或多个进程吗?

arrays - 使用 bash 在 Linux 中创建一个数组

bash - 是否需要指定 EXIT 以外的陷阱?

linux - Linux 文件中缺少 EOL 字符