bash - 将用户变量读入 bash 脚本 grep

bash - 将用户变量读入 bash 脚本 grep

我已经尝试了所有可能的组合来使这个 bash 脚本正常工作。它是一个更大脚本的一部分,它基本上会提示输入用户名(以检查它是否存在)并返回适当的响应:

#! /bin/bash
# Script to see if User exists

clear
echo -n "Enter user to check: "
read $uzer

grep -c '^${uzer}:' /etc/passwd

if [ $? -eq 0 ]; then
  echo "User does exist :)"
else
  echo "No such user"
fi

在终端中,以下工作正常:

grep -c '^devuser1:' /etc/passwd
RETURNS: 1
grep -c '^devuser1234:' /etc/passwd
RETURNS: 0

我尝试了许多将读取变量传递给的组合,'^${uzer}:'但没有任何乐趣。还有什么想法我还可以尝试吗?

答案1

-c表示您想知道该用户进入的次数/etc/passwd,而$?是退出代码。这些是不同的,因为次数打印在标准输出上。用于$()将标准输出放入变量中

第二个问题:所有变量,如$uzer单引号中的变量,都不会被它们的值替换。使用双引号。

number=$(grep -c "^${uzer}:" /etc/passwd)
if [ $number -gt 0 ]; then
  echo "User does exist :)"
else
  echo "No such user"
fi

答案2

你需要grep -q。如果您不区分“0”和“其他”之外的更多退出代码,则无需分隔 grep 和 if:

if grep -q "^${uzer}:" /etc/passwd; then
  echo "User does exist :)"
else
  echo "No such user"
fi

相关内容