如何在linux中检查文件所有者

时间:2014-03-13 14:37:45

标签: linux bash shell

如何在linux中检查文件所有者

我正在尝试运行此bash文件

#!/bin/bash
uname2=$(ls -l $1 | awk '{print $3}');
if [ $uname2 == $USER ]
then echo owner
else echo no owner
fi

它给出了错误=='一元运算符的预期。 怎么了? ubuntu服务器10.04。

5 个答案:

答案 0 :(得分:9)

使用=而非==进行比较。 test(1) man page说:

STRING1 = STRING2
       the strings are equal

我还建议使用stat找出所有者,而不是某些ls黑客。一些双引号和一个额外的x也会很好。

#!/bin/bash
uname2="$(stat --format '%U' "$1")"
if [ "x${uname2}" = "x${USER}" ]; then
    echo owner
else
    echo no owner
fi

答案 1 :(得分:1)

尝试使用bash -x运行您的脚本,您可以确切地看到发生了什么。我敢打赌你的一个变量是空的。您可以通过引用变量来防止这种情况,例如:

if [ "$uname2" == "$USER" ]

答案 2 :(得分:1)

您忘记将"放在变量旁边。

uname2=$(ls -l $1 | awk '{print $3}');
if [ "$uname2" == "$USER" ]
then echo owner
else echo no owner
fi

答案 3 :(得分:0)

你想:

#!/bin/bash
uname2=$(ls -ld $1 | awk '{print $3}' | tail -1);
if [ "$uname2" == "$USER" ]
then echo owner
else echo no owner
fi

您的输出包含多行,第一行将为空白。所以用tail抓住最后一个。此外,正如其他人所指出的,最佳做法是在参数中使用引号。这样,在空变量等情况下,您不会得到不完整的命令。

您还希望在d的参数列表中包含ls,以便它可以正常使用目录。 (检查目录是否有所有者)否则你只需要获取目录中的最后一个文件。

答案 4 :(得分:0)

有一个简单的选项可用来检查文件是否归执行当前脚本的使用者所有。

if [[ -O "$0" ]]; then
    echo "owner"
else
    echo "no owner"
fi