この 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