如何在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。
答案 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