다음 스크립트를 실행할 때 "/bin/ums:19:[:is_duplicate: 예기치 않은 연산자" 오류가 발생합니다.
#! /bin/sh
group=""
#utility functions
is_duplicate () {
return grep $1 /etc/passwd /etc/group
}
#script
echo "Welcome to the user management system."
echo "Please enter the name of the group you wish to create:"
read group
while [ is_duplicate "$group" -eq 0 ]
do
echo "That group name already exists."
echo "Please enter a new name:"
read group
done
왜?
참고: 이 스크립트는 개발 중입니다. 이 섹션에서는 콘솔에 입력된 그룹의 이름을 찾기 위해 grep을 시도합니다. 그룹이 그룹 파일에 존재하는 경우(즉, grep이 종료 코드 0을 반환함) 계속해서 이름을 묻습니다.
답변1
0 종료 코드로 표시된 성공을 테스트하려면 괄호가 필요하지 않습니다.
while is_duplicate "$group" ; do
...
done
다시 말하지만, return
문자열이 아닌 숫자가 필요합니다 grep
. 종료 코드를 반환하는 함수의 마지막 항목으로 grep
없이 호출할 수 있습니다 .return
하지만 파일에서 찾고 있는 내용을 좀 더 구체적으로 설명해야 합니다.
grep $1 /etc/passwd /etc/group
사용자 이름이나 쉘 경로에 대해서도 true를 반환합니다.
최소한 인용을 하세요. $1
(아마도 확인해 보세요. 예를 들어 하는 일을 시도해 볼 수도 있습니다 -v :
.)