저는 쉘 스크립팅을 배우고 있으며 사용자에게 "7" 권한("rwx")이 있는 파일을 나열하는 스크립트를 작성하고 있습니다. 지금까지 나는 이렇게 썼다:
for F in *
do
a= $(stat -c "%a" "$F")
echo $a
if ((b==7))
then
echo $F
fi
done
여기서 a의 값은 "1"입니다. 내가 여기서 뭘 잘못하고 있는 걸까?
답변1
쉘에서는 공간이 중요합니다. 바꾸다
a= $(stat -c "%a" "$F")
그리고:
a=$(stat -c "%a" -- "$F")
(또한 --
명령이 로 시작하는 파일 이름에 대해 계속 작동하도록 옵션 구분 기호를 추가하십시오 -
)
또는
a=$(stat -Lc "%a" -- "$F")
심볼릭 링크의 경우 심볼릭 링크 대상에 대한 권한이 필요합니다(대부분의 시스템에서 심볼릭 링크 자체에 대한 권한은 관련이 없기 때문입니다).
예
간단하게 유지하기 위해 stat
단일 파일에 대해 명령을 실행한 다음 대화형 명령줄에서 이 작업을 수행합니다.
$ stat -c "%a" file
660
이제 공백을 사용하여 명령을 시도해 보겠습니다.
$ a= $(stat -c "%a" file)
bash: 660: command not found
$ echo a=$a
a=
오류 메시지가 표시되고 a
새 값으로 설정되지 않았습니다. (귀하의 경우와 같이 a
before 에 할당된 경우 1
변경되지 않은 상태로 유지됩니다 1
.) 이제 공백 없이 시도해 보세요.
$ a=$(stat -c "%a" file)
$ echo a=$a
a=660
이것은 작동합니다. a
명령에서 반환된 숫자로 성공적으로 설정되었습니다 stat
.