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을 변수로 가져오는 데 사용

두 번째 문제: 모든 변수는 $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

관련 정보