스크립트를 사용하여 파일 권한 확인 및 변경

스크립트를 사용하여 파일 권한 확인 및 변경

저는 bash를 처음 접했고 스크립트가 작동하도록 할 수 없습니다. 이것은 내 코드입니다.

#!/bin/bash
file=~/scripts/text.txt

if [ -e $file ]
then echo "The file exists"

elif [ ! -e $file ]
then echo "The file does NOT exist"

fi

sleep 1s

if [ ! -w $file ]
then { sudo chmod u+w $file; } && { echo "The file is now writable"; }

elif [ -w $file ]
then echo "The file is already writable"
fi

스크립트의 상단 부분에서는 파일이 존재하고 제대로 작동하는지 확인합니다. 파일 쓰기 가능 여부를 확인하는 하단 부분이 부분적으로 작동합니다. 파일의 권한이 변경됩니다. 그러나 쓰기 권한을 활성화한 후에도 "파일은 이미 쓸 수 있습니다" 대신 "파일은 이제 쓸 수 있습니다"라는 메시지가 계속 표시됩니다.

내가 말했듯이, 나는 bash를 처음 접했기 때문에 도움을 주시면 대단히 감사하겠습니다. if 문의 복잡성은 제가 현재 아는 범위를 넘어서므로 간단하게 유지하시기 바랍니다.

답변1

이상한 점은 파일 sudo이 홈 디렉토리에 있음에도 불구하고 파일에 대한 권한을 변경하는 데 사용한다는 것입니다. 이 파일이 당신의 것입니까? chmod u+w파일 소유자에게만 쓰기 권한을 부여하십시오. 당신이 소유자라면 sudo가 필요하지 않습니다. 소유자가 아닌 경우에는 반드시 해야 sudo하지만 chmod u+w소유자에게 쓰기 권한을 부여하는 것만으로는 파일에 쓸 수 있는 권한이 부여되지 않습니다. 따라서 을 실행한 후에도 chmod u+w파일에 여전히 쓸 수 없으며 이는 [ -w … ]테스트 결과입니다.

ls -l ~/scripts/text.txt파일 소유권과 권한을 확인하려면 실행하세요 .

그 외에도 변수 대체에는 항상 큰따옴표를 사용하세요. (또는 모두 배울 수 있습니다.규칙그리고 모든 규칙을 모르는 사람들이 스크립트를 유지 관리하기 어렵게 만드십시오. ) 짜증나게도 $file쉘 구문에서는 "변수의 값을 가져옵니다 file"를 의미하지 않고 "변수의 값을 가져와서 file와일드카드 패턴 목록으로 구문 분석하고 일치하는 파일이 있으면 일치하는 파일 목록을 사용하는 것을 의미합니다. 모든 패턴을 교체하세요." 큰따옴표 안에 대체가 발생하면 이 추가 콘텐츠가 닫힙니다. "$file"즉, "변수의 값을 가져옵니다 file"를 의미합니다.

또한 이러한 괄호가 모두 필요하지 않습니다.

if [ ! -w "$file" ]
then
  sudo chmod u+w "$file" && echo "The file is now writable"
elif [ -w "$file" ]
then
  echo "The file is already writable"
fi

[ -w "$file" ]yes 의 음수 이므로 해당 값에 도달 [ ! -w "$file" ]하면 elif테스트가 항상 성공합니다. (경쟁 조건이 없으면 elif동일한 조건을 다시 테스트하는 테스트가 다른 결과를 반환할 수 있으므로 이는 좋지 않습니다.) 따라서 다음과 같이 단순화할 수 있고 해야 합니다.

if [ ! -w "$file" ]
then
  sudo chmod u+w "$file" && echo "The file is now writable"
else
  echo "The file is already writable"
fi

답변2

견적이 누락되었습니다.

echo "The file is now writable;

~해야 한다

echo "The file is now writable";

이제 문제를 해결했으므로 소유자를 대신하여 권한을 변경했다고 생각합니다 root(문자 권한 체계에 100% 익숙하지 않음).uroot

a또는를 사용해 보고 싶을 수도 있습니다 o.

then { sudo chmod a+w $file; } && { echo "The file is now writable"; }

추가 사항:exit 1파일이 존재하지 않는 경우 이 작업을 수행해야 할 수도 있습니다.

답변3

아래 코드를 시도해 보세요.

#!/bin/bash
file=~/scripts/text.txt
# To check existence of the file
[ -e $file ] && E="The file exists" || E="The file does NOT exists"
echo "$E"

# checking whether the file is writable or not and changing permissions

[ -w $file ] && F="The file is already Writable" || F="The file is now Writable"
chmod u+w $file 
echo "$F"

답변4

다음 스크립트를 사용하여 테스트했으며 정상적으로 작동했습니다.

아래 스크립트는 현재 로그인한 사용자의 쓰기 조건을 테스트하고 쓰기 권한이 없는 경우 파일 소유자가 현재 로그인한 사용자와 동일한 경우에만 쓰기 권한을 추가합니다.

모든 사람에게 쓰기 액세스 권한을 부여하려면 sudo chmod a+w 경로를 사용하세요.

#!/bin/bash
path="/scripts/text.txt"
if [[ -f $path ]]
then
echo "$path file exsists"
if [[ -w $path ]]
then
echo "$path file is writable"
else
echo "$path file is not writable"
echo "Now we are adding write acess to the file"
chmod u+w $path
if [[ -w $path ]]
then
echo "$path  file is writable now"
fi
fi
else
echo "$path file doesnt exsists"
fi

관련 정보