(Ubuntu bash脚本)从配置txt设置权限

时间:2019-01-03 13:05:02

标签: bash ubuntu config

我是一个初学者,试图编写一个脚本,该脚本带有一个配置文件(下面的示例)并为用户设置权限,如果该用户或组不存在,则会被添加。

对于文件中的每一行,我都要剪切用户或组,并检查它们是否存在。

现在我只检查用户。

#!/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对我不起作用,我找不到只能设置一次的变量。

1 个答案:

答案 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"