如何测试我的变量是否不在集合中?

如何测试我的变量是否不在集合中?

我正在尝试修改 bash shell 脚本并需要一些帮助。

我有一个包含一堆文件的目录。我需要的是循环遍历文件,如果文件名不在特定的文件名集中,则更改文件权限和模式。

像这样的东西:

for my_file in `ls my_dir/*.so`
do
   if [ $myy_file ! in ["a.so", "b.so"]]; then
      chmod 777 $my_file
      chown igor $my_file
   fi
done

检查不在集合中的几个文件要容易得多。然后比较大文件名集中的名称。

答案1

如果您不想处理隐藏文件:

for f in  my_dir/*.so; do
  case $f in
    (*/[ab].so) : ;;
    (*) chmod 777 -- "$f"; chown igor -- "$f" ;;
  esac
done

请注意,将文件权限设置为第777章是非常糟糕的理想,导致安全漏洞并使chown命令后来浪费。

答案2

在大多数情况下,您可以通过以下方式避免 if 循环结构:

chmod 777 -- my_dir/[^ab].so my_dir/*??.so
chown igor -- my_dir/[^ab].so my_dir/*??.so

相关内容