我有一个用户数组,我需要查看数组中是否存在文件(logfile.log)的所有者。使用awk我能够拉出所有者($ 3)但是当我使用try来查看$ 3是否在用户中时,我在if语句的开头出现语法错误。我有限的理解是awk不喜欢语法。
user=('michael' 'mark' 'luke' 'john' 'phil' 'sam' 'kevin');
ls -ldL logfile.log 2>/dev/null |
/bin/awk '{
Result = $NF ":\tPermissions=" $1;
if ([[ "${user[*]}" =~ (^|[^[:alpha:]])$3([^[:alpha:]]|$) ]]) {
Result = Result "\tOwner=SUPPORT";
}
else {
Result = Result "\tOwner=" $3;
}
print Result;
}'
答案 0 :(得分:1)
不要解析ls
(http://mywiki.wooledge.org/ParsingLs)。使用stat
获取所有者(查看您的stat手册页,有不同操作系统的不同实现)
# give your arrays a plural variable name
users=('michael' 'mark' 'luke' 'john' 'phil' 'sam' 'kevin')
owner=$(stat -c '%U' logfile.log)
if [[ " ${users[*]} " == *" $owner "* ]]; then # spaces are deliberate
echo logfile.log has a valid owner: $owner
else
echo logfile.log is not owned by a valid user: $owner
fi
另一种方法是迭代数组并寻找完全匹配:
valid=false
for user in "${users[@]}"; do
if [[ $user == $owner ]]; then
valid=true
break
fi
done
if $valid; then
echo file has a valid owner
fi
您的代码中的主要问题是您希望awk理解bash语法。它没有。