¿Cómo pruebo si mi variable no está en un set?

Estoy tratando de modificar el script de Bash Shell y necesito ayuda.

Tengo un directory con muchos files. Lo que necesito es revisar los files en un bucle y, si el nombre del file no está en un set específico de nombres de files, cambie el permiso y el modo del file.

Algo como esto:

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 

Es mucho más fácil search un par de files que no están en el set. Luego compare el nombre en el gran set de nombres de files.

Si no quieres procesar los files ocultos:

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

Tenga en count que establecer el permiso de file en 777 es muy malo, lo que causa un agujero de security y hace que el command chown se desperdicie posteriormente.

En la mayoría de los casos, puedes evitar tu estructura de bucle si:

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