我是一个初学者,试图编写一个脚本,该脚本带有一个配置文件(下面的示例)并为用户设置权限,如果该用户或组不存在,则会被添加。
对于文件中的每一行,我都要剪切用户或组,并检查它们是否存在。
现在我只检查用户。
#!/bin/bash
function SetRights()
{
if [[ $# -eq 1 && -f $1 ]]
then
for line in $1
do
var1=$(cut -d: -f2 $line)
var2=$(cat /etc/passwd | grep $var1 | wc -l)
if [[ $var2 -eq 0 ]]
then
sudo useradd $var1
else
setfacl -m $line
fi
done
else
echo Enter the correct path of the configuration file.
fi
}
SetRights $1
配置文件如下:
u:TestUser:- /home/temp
g:TestGroup:rw /home/temp/testFolder
u:TestUser2:r /home/temp/1234.txt
输出:
grep: TestGroup: No such file or directory
grep: TestUser: No such file or directory
"The useradd help menu"
如果您能给我提示我应该在研究中寻找的东西,我将不胜感激。
是否可以重置var1和var2?使用unset对我不起作用,我找不到只能设置一次的变量。
答案 0 :(得分:0)
尚不清楚如何遍历文件的内容-如果$1
包含文件名,则您应该不会看到报告的错误。
但是无论如何,这是一个重构版本,有望避免您遇到的问题。
# Avoid Bash-only syntax for function definition
SetRights() {
# Indent function body
# Properly quote "$1"
if [[ $# -eq 1 && -f "$1" ]]
then
# Read lines in file
while read -r acl file
do
# Parse out user
user=${acl#*:}
user=${user%:*}
# Avoid useless use of cat
# Anchor regex correctly
if ! grep -q "^$user:" /etc/passwd
then
# Quote user
sudo useradd "$user"
else
setfacl -m "$acl" "$file"
fi
done <"$1"
else
# Error message to stderr
echo Enter the correct path of the configuration file. >&2
# Signal failure to the caller
return 1
fi
}
# Properly quote argument
SetRights "$1"