Linux EXISTS=`ssh xyz';白鹭“$用户名"/etc/passwd|cut-d';:'-f1';`命令运行不正常

Linux EXISTS=`ssh xyz';白鹭“$用户名"/etc/passwd|cut-d';:'-f1';`命令运行不正常,linux,bash,ssh,Linux,Bash,Ssh,我正在编写一个脚本来在多个linux服务器上添加用户。但首先我要检查提到的用户名是否已经存在于特定的服务器上 EXISTS=`ssh xyz 'egrep "$username" /etc/passwd | cut -d':' -f1'` 这是我正在尝试的命令。但它并没有给我想要的输出,而是给我passwd文件中的所有用户名。 变量EXISTS应该只有该用户名,否则它应该为空。在任何现代Linux系统上,都有getent。因此,不要这样检查,而是检查以下各项的返回代码(通过$?): (如果用户

我正在编写一个脚本来在多个linux服务器上添加用户。但首先我要检查提到的用户名是否已经存在于特定的服务器上

EXISTS=`ssh xyz 'egrep "$username" /etc/passwd | cut -d':' -f1'`
这是我正在尝试的命令。但它并没有给我想要的输出,而是给我passwd文件中的所有用户名。
变量EXISTS应该只有该用户名,否则它应该为空。

在任何现代Linux系统上,都有
getent
。因此,不要这样检查,而是检查以下各项的返回代码(通过
$?
):

(如果用户存在,则以0退出;如果用户不存在,则以2退出;手册页中描述的其他错误代码)

(注意:这不是一个真正的Java问题,是吗?)


编辑确定,完整代码

ssh thehost getent passwd $username;
RC=$?;
# check for $RC here; if 0, the user exists; if not 0 it doesn't.
# Man getent for more details

请注意,另一种解决方案是尝试直接添加用户;如果用户已经存在,或者由于其他原因,该命令将失败;在这里,再次输入manuseradd,并检查可能的返回代码。

谢谢您的建议,但我相信只有输入getentpasswd$uname,它才会起作用。。。它不适用于getent/etc/passwd$uname。。所以我必须执行cd/etc,然后调用这个命令..不,一点也不。阅读getent的手册页
passwd
这是一个操作系统数据库。更准确地说,它从
/etc/nsswitch.conf
读取配置。那么在本例中,这是正确的语法吗??EXISTS=
ssh xyz'getent passwd$username | cut-d':'-f1'
no。请参阅我不想要错误代码,我想要用户名,以便我可以比较它是否已经存在。为什么要用户名?这太荒谬了。再次声明:
getent passwd$username
如果系统上已经存在
$username
则返回0,如果不存在则返回2
ssh thehost getent passwd $username;
RC=$?;
# check for $RC here; if 0, the user exists; if not 0 it doesn't.
# Man getent for more details