bash는 while 루프에서 함수를 호출합니다.

bash는 while 루프에서 함수를 호출합니다.

다음 스크립트를 실행할 때 "/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 :.)

관련 정보