次のスクリプトを実行すると、「/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 :
)