为什么此脚本无法执行其他脚本

时间:2015-04-06 16:18:58

标签: linux bash debian

此脚本查找其中包含字符串RECHERCHE的所有用户。我尝试在sudo中运行它并且它有效,但随后在第8行停止(权限被拒绝)。即使从脚本中删除sudo,这个问题仍然会发生。

#!/bin/bash
#challenge : user search and permission rewriting
echo -n "Enter string to search : "
read RECHERCHE
echo $(cat /etc/passwd | grep "/home" | cut -d: -f5 | grep -i "$RECHERCHE" | sed s/,//g)
echo "Changing permissions"
export RECHERCHE
sudo ./challenge2 $(/etc/passwd) &

然后,第二个脚本在后台更改属于RECHERCHE找到的每个用户的每个文件的权限。如果你能帮我弄清楚这不是正确的做法,那将是很好的服务。一世

#!/bin/bash
while read line
do

        if [-z  "$(grep "/home" | cut -d: -f5 | grep -i "$RECHERCHE")" ]
              then
        user=$(cut -f: -f1)
        file=$(find / -user $(user))
        if [$(stat -c %a file) >= 700]
                then
        chmod 700 file 2>> /home/$(user)/challenge.log
        fi
        if [$(stat -c %a file) < 600]
                then
        chmod 600 file 2>> /home/$(user)/challenge.log
        fi
        umask 177 2>> /home/$(user)/challenge.log
        fi
done

我必须知道我在做什么。

1 个答案:

答案 0 :(得分:0)

$( ... )语法表示命令替换,即:它将被paranthesis中的命令输出替换。

由于/etc/passwd不是命令而只是文本文件,因此您无法执行

所以,如果你想将/etc/passwd的内容传递给你的脚本,你只需要调用它:

./challenge2 < /etc/passwd

或者,如果您需要特殊权限来读取文件,例如

sudo cat /etc/passwd | ./challenge2

同样在您的challenge2脚本中,您使用$(user)这是错误的,因为您实际上只想展开user变量:使用花括号这就像${user}

一样

/ etc / passwd的?

不是你问的问题,但你可能不应该直接阅读/etc/passwd。 如果要获取用户列表,请使用以下命令

$ getent passwd

这可能会比/etc/passwd中存储的用户多,因为您的系统可能会使用其他PAM后端(ldap,...)