我有这样一个练习:创建一个"groups" BASH shell脚本,该脚本将groups_file.txt
文件作为参数,结构如下:
adm:x:4:syslog,adm1
admins:x:1006:adm2,adm12,manuel
ssl-cert:x:122:postgres
alan2:x:1009:aceto,salvemini
conda:x:1011:giovannelli,galise,aceto,caputo,haymele,salvemini,scala,adm2,adm12
adm1Group:x:1022:adm2,adm1,adm3
docker:x:998:manuel
即:
1.打印给定文件中一行的最大字段数
1.为文件中的每个组创建一个子目录,为组"adm"和"admins"的用户提供读写访问权限
1.逐行为包含属于该组的用户的每个子目录创建文件
我做了前两点,但我不知道如何做最后一点。我试图用awk使组等于$1,然后我将它们重定向到"$group/user"文件,但它不起作用
#!/bin/bash
echo "Stampo il numero massimo di campi di una linea in un dato file: "
cat groups_file.txt | awk -F "[\t,:]" 'NF>6 {print $0}'
g=$(cat groups_file.txt | awk -F : '{print $1}')
for group in $g
do
mkdir "$group"
chmod +rwx "$group"
touch "$group"/users
chmod +rw "$group"/users
done
1条答案
按热度按时间kulphzqa1#
你想一次读一行,然后把它分成冒号。
一个子目录不能属于多个组,因此必须提供一个单独的机制来提供对多个组的读访问,下面我简单地将其命名为组
adm
;更好的解决方案可能是创建具有X1 M1 N1 X和X1 M2 N1 X的所有成员的新组。我想“最大字段数”是指打印成员数最多的行。
还请注意这是如何避免useless use of
cat
的。