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 이 사용자가 입력한 횟수를 알고 싶다는 의미입니다 . $?시간은 표준 출력으로 인쇄되기 때문에 다릅니다. $()표준 출력을 변수에 넣는 데 사용됩니다 .

두 번째 문제: $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

관련 정보