사용자 존재 여부를 확인하는 스크립트를 만들고 싶습니다. 아래 논리를 사용하고 있습니다.
# getent passwd test > /dev/null 2&>1
# echo $?
0
# getent passwd test1 > /dev/null 2&>1
# echo $?
2
따라서 사용자가 존재하면 성공한 것입니다. 그렇지 않으면 사용자가 존재하지 않습니다. 아래 명령을 bash 스크립트에 넣었습니다.
#!/bin/bash
getent passwd $1 > /dev/null 2&>1
if [ $? -eq 0 ]; then
echo "yes the user exists"
else
echo "No, the user does not exist"
fi
이제 내 스크립트는 항상 사용자가 무엇이든 관계없이 존재한다고 말합니다.
# sh passwd.sh test
yes the user exists
# sh passwd.sh test1
yes the user exists
# sh passwd.sh test2
yes the user exists
위의 조건이 항상 참으로 평가되고 사용자가 존재한다고 말하는 이유는 무엇입니까?
내가 어디로 잘못 가고 있니?
최신 정보:
모든 답변을 읽은 후 스크립트에서 문제를 발견했습니다. 문제는 getent
출력 을 리디렉션하는 방식이었습니다 . 그래서 모든 리디렉션 항목을 제거하고 getent
다음과 같이 라인을 만들었습니다 .
getent passwd $user > /dev/null
이제 내 스크립트가 제대로 작동합니다.
getent
과 명령문 사이에 "echo"디버그 명령문이 if
없습니까? 즉 원인이 $?
의 종료 상태 확인 echo
을하지 전화를 getent
.
2>&1
대신 의미 하는 것 같아요 2&>1
.
$1
설정하지 않으면 if 문이 true를 반환합니다. 내 테스트에서 해결책은 $1
큰 따옴표 로 묶는 것 getent passwd "$1" > /dev/null 2&>1
입니다.
$?
의 리턴 코드를 얻는다고 생각합니다test
. 아래 답변을 참조하십시오.