Como posso testar se minha variável não está em um conjunto?

1

Estou tentando modificar o script do shell bash e preciso de ajuda.

Eu tenho um diretório com vários arquivos. O que eu preciso é percorrer os arquivos em um loop e se o nome do arquivo não estiver em um conjunto específico de nomes de arquivos, altere a permissão e o modo de arquivo.

Algo parecido com isto:

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

É muito mais fácil verificar alguns arquivos que não estão no conjunto. Em seguida, compare para o nome no grande conjunto de nomes de arquivos.

    
por Igor 19.06.2015 / 17:11

2 respostas

3

Se você não quiser processar arquivos ocultos:

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

Observe que a permissão do arquivo de configuração para 777 é muito ruim, causando falhas de segurança e tornando o comando chown mais tarde desperdiçado.

    
por 19.06.2015 / 17:31
0

Na maioria dos casos, você pode evitar sua estrutura if looping:

chmod 777 -- my_dir/[^ab].so my_dir/*??.so
chown igor -- my_dir/[^ab].so my_dir/*??.so
    
por 19.06.2015 / 19:55