본문 바로가기
개발/linux

쉘 스크립트 활용

by 가시죠 2023. 4. 8.
반응형

1. 현재 날짜로 파일 만들기

#!/bin/bash

vi $(date '+%Y-%m-%d').txt

 

2. 현재 날짜로 디렉토리를 만들고 현재날짜로 파일 만들기

#!/bin/bash

# 사용자 홈 디렉토리 아래 dir 폴더 생성을 위한 변수 선언
dir="${HOME}/dir"

# 디렉토리가 없으면 생성
if [ ! -d "$dir" ]; then
        mkdir "$dir"
fi

# 디렉토리 아래 현재날짜 파일명으로 vi 실행
vi "${dir}/$(date '+%Y-%m-%d').txt"

 

3. 절대경로에서 파일이름 추출하기

##*/ 명령어로 전체의 / 앞 부분을 삭제 (패턴 : */)

$ filepath=/home/hitomis/script/test.sh
$ echo "${filepath##*/}"

#출력결과
test.sh

bash 파라메터 전개

   
${변수명#패턴} 전방 최단 매치 패턴 일치 부분제거
${변수명##패턴} 전방 최장 매치 패턴 일치 부분제거
${변수명%패턴} 후방 최단 매치 패턴 일치부분 제거
${변수명%%패턴} 후방 최장 매치 패턴 일치부분 제거

 

4. 특정 디렉토리를 단계별로 출력하는 프로그램

#!/bin/bash

list_recursive()
{
        # 첫번째 인자를 filepath라는 로컬 변수에 대입
        local filepath=$1
        local indent=$2

        #echo "$filepath"
        # 들여쓰기 및 파일이름만 추출
        echo "${indent}${filepath##*/}"

        #디렉토리일 경우 안에 포함하는 파일/디렉토리 출력
        if [ -d "$filepath" ]; then

                local fname

                # 공백도 문자로 인식하므로 공백제거
                #IFS=$'\n'

                # ls 명령으로 결과를 fname 변수에 대입하여 for문으로 출력
                for fname in $(ls "$filepath")
                do
                        #디렉토리 내 파일 출력
                        #echo "${filepath}/${fname}"
                        #재귀 호출을 통한 파일 출력
                        #들여쓰기를 위해 2번째 인자에 공백을 추가하여 재귀호출
                        list_recursive "${filepath}/${fname}" "  $indent"

                done
        fi
}

list_recursive "$1"

 

5. find , xargs와 grep 명령어를 사용하여 특정 경로의 파일을 대상으로 특정 문자열 검색

#!/bin/bash

# 인자값 첫번째(검색어) 두번째(경로) 세번째(파일명)를 변수에 대입
pattern=$1
dir=$2 
name=$3

# 세번재 인자(파일명) 빈 문자열이면 기본으로 전체 파일 대상지정
if [ -z "$name" ]; then
        name='*'
fi

# find 명령으로 타입이 파일 전체 파일을 가져와 xargs로 리스트를 받은 후 grep 문자열로 검색
find "$dir" -type f -name "$name" | xargs grep -nH "$pattern"

 

반응형

'개발 > linux' 카테고리의 다른 글

아카이브 (archive)  (0) 2023.04.08
쉘 스크립트 괄호확장  (1) 2023.04.08
쉘 스크립트 문법  (0) 2023.03.13
bash 기초 - tar  (0) 2022.08.24
bash 기초 - du (disk usage)  (0) 2022.08.24

댓글