任何人都可以帮我为以下场景编写一个脚本吗?
- usera 属于 groupa,并且 usera 有权访问“groupa”文件系统
- userb 属于 groupb,并且 userb 有权访问“groupb”文件系统
- userc 属于 groupc,并且 userc 有权访问“groupc”文件系统
- userd 属于 groupd,并且 userd 有权访问“groupd”文件系统
注意:- 组名称和文件系统相同。
帮我写一个脚本,当用户登录时,组名被识别并执行
df -h */group_name*
例如:- 如果 usera 登录,那么我们需要 o/p“df -h/groupa”
[root@server5 ~]# df -h /groupa
Filesystem Size Used Avail Use% Mounted on
/dev/groupa 601T 477T 125T 80% /groupa
[root@server5 ~]#
需要通过放置一些逻辑来编写一个写入,每次用户登录系统时,该脚本都需要运行并在他/她的终端上产生输出。我们正在尝试向用户提供有关其文件系统利用率的信息。这可以通过将此脚本放入/etc/profile.d/目录中来完成。用户信息可以从$USER变量中获取,组信息可以通过“id -gn”找到
注意:- 一些文件系统如下所示。
/文件系统/组
- usere 属于 groupe,并且 usere 可以访问“/filesystem/groupe”文件系统
我通过使用下面给出的脚本解决了我的问题:-
grp=$(id -gn)
if [ "$grp" == "groupa" ]
then
df -h /groupa
else
if [ "$grp" == "groupb" ]
then
df -h /groupb
else
if [ "$grp" == "groupc" ]
then
df -h /groupc
else
if [ "$grp" == "groupd" ]
then
df -h /groupd
else
if [ "$grp" == "groupe" ]
then
df -h /filesystem/groupe
fi
fi
fi
fi
fi
最佳答案
有一种更简单的方法可以测试用户是否是 bash 中的 group{a..z} 的成员。 (注意:这是仅 bash 的解决方案,因为它使用 [[
构造和 =~
运算符)。使用 id -Gn
还可以处理 group{a..z} 不是用户的主要组的情况,否则会导致基于 id -gn
的搜索失败:
#!/bin/bash
grps=$(id -Gn) ## return a list of groups of which user is a member
for i in group{a..z}; do ## for i in groupa, groupb, groupc, ..., groupz
## test if groupX is in the list $umg
# on match get disk usage of /groupX
[[ $grps =~ $i ]] && du -hs /$i
done
关于linux - 任何人都可以帮我为以下场景编写脚本吗,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29941725/