私はこの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
このユーザーが入力した回数を知りたいという意味です。$?
時間は標準出力として印刷されるので異なります。$()
標準出力を変数に入れるために使用されます。
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 grep -q "^${uzer}:" /etc/passwd; then
echo "User does exist :)"
else
echo "No such user"
fi