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で、$?は終了コードです。回数はstdoutに出力されるので、これらは異なります。stdoutを$()変数に取り込むために使用します。

2 番目の問題: などのすべての変数は、$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

関連情報