내 변수가 세트에 없는지 어떻게 테스트할 수 있나요?

내 변수가 세트에 없는지 어떻게 테스트할 수 있나요?

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

관련 정보