![bash - 将用户变量读入 bash 脚本 grep](https://linux22.com/image/31527/bash%20-%20%E5%B0%86%E7%94%A8%E6%88%B7%E5%8F%98%E9%87%8F%E8%AF%BB%E5%85%A5%20bash%20%E8%84%9A%E6%9C%AC%20grep.png)
我已经尝试了所有可能的组合来使这个 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