私の変数がセットにないことをどうやってテストできますか?

私の変数がセットにないことをどうやってテストできますか?

Bashシェルスクリプトを変更しようとするのに助けが必要です。

複数のファイルを含むディレクトリがあります。私にとって必要なのは、ファイルを繰り返し、ファイル名が特定のファイル名のセットにない場合は、ファイルの権限とモードを変更することです。

このような:

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

関連情報