![bash는 while 루프에서 함수를 호출합니다.](https://linux55.com/image/206338/bash%EB%8A%94%20while%20%EB%A3%A8%ED%94%84%EC%97%90%EC%84%9C%20%ED%95%A8%EC%88%98%EB%A5%BC%20%ED%98%B8%EC%B6%9C%ED%95%A9%EB%8B%88%EB%8B%A4..png)
다음 스크립트를 실행할 때 "/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 :
.)