나는 이 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