Bash에서 쉘 프로그램 만들기 및 프로그램에서 파일 호출 및 텍스트 변경 [닫기]

Bash에서 쉘 프로그램 만들기 및 프로그램에서 파일 호출 및 텍스트 변경 [닫기]

자바스크립트를 작성하라는 지시를 받았습니다. 몇 가지 쉘 스크립팅을 배운 후(거의) 나는 다음을 만들었습니다.

for item in *
do
    if [ -f $item ]
    then 
        sed  's/test/open/g' file.sh
done

나는 이 프로그램이 내가 이 프로그램을 넣은 폴더에서 파일을 찾을 것이라고 믿습니다. 그런 다음 file.sh를 찾아서 sed에서 이해한 대로 test라는 단어를 open으로 바꿉니다(다시 한 번 말씀드리지만, 이것이 사실이 아니라면 용서해 주세요). 프로그램이 하나의 파일 대신 프로그램에서 모든 .sh 파일을 찾고 모든 파일에서 test라는 단어를 찾아 open으로 바꾸도록 이를 수정하려면 어떻게 해야 합니까? 모호하다면 죄송합니다. 하지만 제가 처리해야 할 일은 그게 전부입니다.

답변1

귀하의 스크립트에는 여러 면에서 결함이 있습니다.

for item in * <--do the following action on every item in this directory
do

         if [ -f $item ]  <--if the item is a file then do this
         then 
                sed  's/test/open/g' file.sh  <-- replace "test" with "open" in the file - file.sh
          <--missing closing "fi" statement here
done

무엇을 하려는지 잘 모르겠지만, 모든 test 항목을 파일에서 open으로 바꾸려는 경우: 모든 파일에서 이를 바꾸려면 file.sh다음을 수행해야 합니다.sed 's/test/open/g' file.sh

#!/bin/bash
#
script=$(basename "$0")
for item in "/path/to/files/"*; do
    if [[ "$item" == "$script" ]]; then
        :
    elif [[ -f "$item" || "${item: -2}" = "sh" ]]; then 
        sed -i 's/test/open/g' "$item"
    fi
done

편집하다

수행 중인 작업이 확실하지 않은 경우 이 스크립트를 매우 주의 깊게 사용해야 합니다. 올바른 디렉토리를 가리키고 있는지 확인하고 그 안에 있는 모든 파일을 전면적으로 수정하고 있다는 점에 유의하세요.

답변2

먼저 몇 가지 오해를 바로잡아야 합니다.

당신의 스크립트는 현재 무엇을 하고 있나요? 스크립트가 있는 디렉터리의 각 항목을 반복합니다.처형된(위치가 아님) 그런 다음 파일인지 여부에 관계없이 모든 항목을 찾습니다. 파일인 경우 파일 을 열고 file.sh.sed

수행해야 할 작업:

file.sh모든 실제 진술 이후가 아니라 실제 프로젝트를 열어야 합니다 .if

이 목표를 달성하기 위해 어떤 변화를 만들 수 있습니까?

file.sh명령에서 sed다음으로 바꾸십시오.$item

관련 정보