我的问题是为文件添加用户名,我真的坚持继续,请帮忙
问题:我有一个名为usrgrp.dat
的文件。此文件的格式如下:
ADMIN:srikanth,admin
DEV:dev1
TEST:test1
我正在尝试编写一个shell脚本,它应该给我输出:
Enter group name: DEV
Enter the username: dev2
我的预期输出是:
User added to Group DEV
如果我看到usrgrp.dat
的内容,现在应该是:
DEV:dev1,dev2
TEST:test1
如果我尝试在该组中添加已有用户,则应该向我提出错误user already present
。我正在尝试使用以下脚本:
#!/bin/sh
dispgrp()
{
groupf="/home/srikanth/scm/auths/group.dat"
for gname in `cat $groupf | cut -f1 -d:`
do
echo $gname
done
echo "Enter the group name:"
read grname
for gname in `cat $groupf | cut -f1 -d:`
do
if [ "$grname" = "$gname" ]
then
echo "Enter the username to be added"
read uname
for grname in `cat $groupf`
do
$gname="$gname:$uname"
exit 1
done
fi
done
}
echo "Group display"
dispgrp
我被困住了,需要你的宝贵帮助。
答案 0 :(得分:1)
喜欢(假设你的shell是bash):
adduser() {
local grp="$1"
local user="$2"
local gfile="$3"
if ! grep -q "^$grp:" "$gfile"; then
echo "no such group: $grp"
return 1
fi
if grep -q "^$grp:.*\\<$user\\>" "$gfile"; then
echo "User $user already in group $grp"
else
sed -i "/^$grp:/s/\$/,$user/" "$gfile"
echo "User $user added to group $grp"
fi
}
read -p "Enter the group name: " grp
read -p "Enter the username to be added: " user
adduser "$grp" "$user" /home/srikanth/scm/auths/group.dat
答案 1 :(得分:1)
#!/bin/sh
dispgrp()
{
groupf="/home/srikanth/scm/auths/group.dat"
tmpfile="/path/to/tmpfile"
# you may want to pipe this to more or less if the list may be long
cat "$groupf" | cut -f1 -d:
echo "Enter the group name:"
read grname
if grep "$grname" "$groupf" >/dev/null 2>&1
then
echo "Enter the username to be added"
read uname
if ! grep "^$grname:.*\<$uname\>" "$groupf" >/dev/null 2>&1
then
sed "/^$grname:/s/\$/,$uname/" "$groupf" > "$tmpfile" && mv "$tmpfile" "$groupf"
else
echo "User $uname already exists in group $grname"
return 1
fi
else
echo "Group not found"
return 1
fi
}
echo "Group display"
dispgrp
完成循环后,您无需使用循环(例如cat
,sed
和grep
)。
请勿使用for
来迭代cat
的输出。
请勿使用exit
从函数返回。使用return
。
非零退出或返回代码表示错误或失败。使用0
进行正常的成功返回。如果您未指定,则为隐式操作。
学习使用sed
和grep
。
由于你的shebang说#!/bin/sh
,我上面做的更改是基于Bourne shell并假设POSIX实用程序(不是GNU版本)。