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

要测试零退出代码指示的成功,不需要括号。

while is_duplicate "$group" ; do
...
done

同样,return需要一个数字,而不是字符串grep。您可以调用grepwithoutreturn作为函数中的最后一件事,将返回其退出代码。

但您应该更具体地说明从文件中查找的内容。

grep $1 /etc/passwd /etc/group

即使对于用户名或 shell 路径也会返回 true。

至少,引用$1(也许验证一下,你可以尝试例如-v :所做的)。

相关内容