运行以下脚本时,我收到错误:“/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
。您可以调用grep
withoutreturn
作为函数中的最后一件事,将返回其退出代码。
但您应该更具体地说明从文件中查找的内容。
grep $1 /etc/passwd /etc/group
即使对于用户名或 shell 路径也会返回 true。
至少,引用$1
(也许验证一下,你可以尝试例如-v :
所做的)。