for 루프를 사용하여 /home/lost+found를 제외한 모든 /home 디렉토리에 새 파일을 만드는 방법 [닫기]

for 루프를 사용하여 /home/lost+found를 제외한 모든 /home 디렉토리에 새 파일을 만드는 방법 [닫기]
#!/bin/sh
for file in /home/*
do
if [ "{$file}" != "/home/lost+found" ]
then
    touch $file/FILE1
done

내가 달성하고 싶은 것은 모든 /home/ 디렉토리를 반복하고문서제외하고/집/분실+발견. 내가 뭘 잘못했나요?

답변1

fi아무것도 아닙니다. if 문을 종료하고 문자 그대로 중괄호를 사용하여 {$file}확장하는 것을 놓쳤습니다 {/home/somedir}. 중괄호가 있는 매개변수는 ${file}달러 기호가 중괄호 외부에 있도록 확장됩니다 .

또한 패턴은 /home/*디렉터리뿐만 아니라 모든 파일과 일치하므로 touch파일이 있으면 오류가 발생합니다. 내용이 많지 않을 수도 있지만 디렉터리만 일치 /home하도록 패턴을 변경하는 것은 쉽습니다 /home/*/. 후행 슬래시는 변수의 일부가 되므로 비교할 때 이 점을 고려하십시오. (또는 테스트 [ -d "$file" ].)

또한 일반적으로 인용하고 싶은 것은 "$file"... 아니면 dir여기에 넣는 것이 더 적절할 수도 있습니다.

#!/bin/sh
for dir in /home/*/ ; do
    if [ "$dir" != "/home/lost+found/" ] ; then
       touch "$dir/FILE1"
    fi
done

관련 정보