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 :

関連情報