bash - Benutzervariable in Bash-Skript grep einlesen

bash - Benutzervariable in Bash-Skript grep einlesen

Ich habe jede mögliche Kombination ausprobiert, um dieses Bash-Skript zum Laufen zu bringen. Es ist Teil eines größeren Skripts und fordert im Wesentlichen zur Eingabe eines Benutzernamens auf (um zu prüfen, ob dieser existiert) und gibt die entsprechende Antwort zurück:

#! /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

Im Terminal funktioniert Folgendes einwandfrei:

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

Ich habe viele Kombinationen zum Übergeben der Lesevariable ausprobiert, aber '^${uzer}:'ohne Erfolg. Irgendwelche Ideen, was ich sonst noch versuchen könnte?

Antwort1

-cbedeutet, dass Sie wissen möchten, wie oft dieser Benutzer in ist /etc/passwd, während $?der Exit-Code ist. Diese sind unterschiedlich, da die Anzahl auf stdout ausgegeben wird. Verwenden Sie, $()um stdout in eine Variable zu übertragen .

Zweites Problem: Alle Ihre Variablen, wie z. B. , $uzerwerden nicht durch ihre Werte ersetzt, wenn sie in einfachen Anführungszeichen stehen. Verwenden Sie doppelte Anführungszeichen.

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

Antwort2

Sie benötigen grep -q. Wenn Sie nicht zwischen mehr Exit-Codes als „0“ und „andere“ unterscheiden, besteht keine Notwendigkeit, grep und if zu trennen:

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

verwandte Informationen