상세 컨텐츠

본문 제목

Shell Script : 파일 복사하기

리눅스(Linux)

by 주스로그 2024. 3. 20. 17:47

본문

728x90
반응형
시나리오 : 파일명을 입력받으면 해당 파일의 형식을 표시해주는 스크립트를 구성하자
파일 명을 검색 받아 디렉터리면 복사하지 않고, 파일만 지정 위치에 복사하도록 한다.

 

순차적으로 코드를 구성해보자

1) 파일의 이름을 입력받는다

echo -n "Input filename: ";read fn

-n 으로 외부에서 입력받을 수 있게 한 후 , read fn으로 fn이라는 변수로 해당 파일 이름을 저장한다

 

2) 받은 이름이 파일인지, 디렉터리인지 구분한다

if [ -e $fn ];then
  if [ -d $fn ];then
        echo "이것은 디렉터리입니다."

받은 이름의 파일이 존재하는지 -e로 확인한다

또한, -d로 디렉터리인 경우를 구분하여 디렉터리는 복사하지 않고 종료할 수 있도록 한다.

 

3) 파일의 경우, 복사할 수 있도록 복사할 파일 이름을 입력받는다.

  else
        echo "Input savefilename: ";read sf
        cp $fn $sf

        echo "복사 성공!"

복사 할 파일 이름을 sf라는 변수 이름으로 받고 복사한다.

 

+fi로 if문 마무리하기

==>> 이 fi는 디렉터리와 파일을 구분하는 if문의 마무리!

 

4) 입력받은 이름으로 존재하는 파일, 디렉터리가 없는 경우 그대로 종료 할 수 있도록 한다

else
        echo "파일이 없습니다."
fi

그대로 if문 마무리!

 


실행해보기 : /root/DD1/file1을 /root/DD2/file2로 복사해보기

현재 DD1,DD2 디렉터리

현재 DD1, DD2라는 디렉터리는 비어있다.

touch를 통해 DD1디렉터리에 file1을 생성해주고,

준비해둔 Shell을 실행시키니 '복사 성공!' 메세지가 뜬 것을 확인할 수 있다.

ls를 통해 두 디렉터리를 확인해 보니 정상적으로 file2로 복사된 것을 확인할 수 있다.

+++++++++++++++++++++++++

디렉터리를 복사하려고 하면 '이것은 디렉터리입니다'라는 문구와 함께 쉘이 종료된다.

더보기

최종 코드

#!/bin/bash
#filename : /root/cpfile.sh

echo "Input filename: ";read fn

if [ -e $fn ];then
  if [ -d $fn ];then
        echo "이것은 디렉터리입니다."

  else
        echo "Input savefilename: ";read sf
        cp $fn $sf
  fi
else
        echo "파일이 없습니다."
fi

 

728x90
반응형

관련글 더보기