권한 변경

권한 변경

나는 연습하고 노력하고 있습니다:

1) 이름 또는 r,w,x 권한의 모든 조합으로 파일을 생성합니다 = 512개 파일;

2) 이름과 일치하도록 파일에 대한 권한을 변경하십시오.

나는 이 스크립트를 만들었습니다:

touch ./{r,-}{w,-}{x,-},{r,-}{w,-}{x,-},{r,-}{w,-}{x,-}

for i in *
   do
       syntax="${i//:}"
       u=${syntax:0:3}
       g=${syntax:3:3}
       o=${syntax:6:3}

       chmod u="$u",g="$g",o="$o" -- "$i" 
  done

이름과 일치하도록 일부 권한이 변경되지만 전부는 아닙니다.

답변1

일부 오류가 있습니다. 먼저 쉼표로 구분된 세 개의 파일 집합으로 구성된 파일을 만듭니다.

touch ./{r,-}{w,-}{x,-},{r,-}{w,-}{x,-},{r,-}{w,-}{x,-}

그러나 콜론을 제거하고 싶습니다. 콜론은 쉼표여야 합니다.

syntax="${i//:}"

스크립트가 동일한 디렉터리에 있으면 문제가 발생할 수 있습니다.

for i in *

물론, ../myscript이렇게 실행하면 문제가 없습니다. 그러나 스크립트가 동일한 디렉터리에 있으면 이를 방지할 수 있습니다.

for i in ???????????

(물론 11자 이름을 지정하지 않는다는 가정하에요.)

마지막으로 큰 버그가 있습니다. 파일 이름을 세 개의 문자열로 나눕니다 u='-w-' g='r-x' o='-wx'. 예를 들어 chmod; 먼저 하이픈을 제거해야 합니다. 따라서 분할 후:

u=${u//-}
g=${g//-}
o=${o//-}

이러한 모든 변경 후에는 다음과 같은 작업 결과를 얻습니다.

touch ./{r,-}{w,-}{x,-},{r,-}{w,-}{x,-},{r,-}{w,-}{x,-}

for i in ???????????
    do
        syntax="${i//,}"
        u=${syntax:0:3}
        g=${syntax:3:3}
        o=${syntax:6:3}
        u=${u//-}
        g=${g//-}
        o=${o//-}

        chmod u="$u",g="$g",o="$o" -- "$i" 
    done

답변2

구문 분석에 문자 오류가 있습니다. 구문 변수를 구문 분석하면 '--r,--r,--r' 문자열을 얻게 됩니다: u='--r' g=',--' o='r,-'

스크립트를 다음과 같이 변경해야 합니다.

   u=${syntax:0:3}
   g=${syntax:4:3}
   o=${syntax:8:3}

또 하나의 팁은 쉘 스크립트를 디버깅하려면 인터프리터 줄에 "-x"를 추가해 보세요. 즉, '#!/bin/bash -x'는 훌륭한 디버그 출력을 많이 제공합니다. :)

관련 정보