프로그래밍/리눅스 프로그래밍

[bash script] 유용한 bash 스크립트 모음

jinkwon.kim 2021. 6. 7. 10:37
728x90
반응형

실행 결과를 바로 읽어서 한 줄씩 처리 하기

#!/bin/bash
 
find ./ -name config.log | while read file_name;
do
    echo "$file_name " && tail -n 1 $file_name
done

bash 세부 명령 

read

    - 표준 입력(파이프라인 입력 또는 키보드 입력)에서 한 줄의 내용씩 읽어 들이는 명령어이다.

while

    - 반복문

find

    - 검색 명령

Option 만들기 

#!/bin/bash
# Bash Menu Script Example
 
PS3='Please enter your choice: '
options=("Option 1" "Option 2" "Option 3" "Quit")
select opt in "${options[@]}"
do
    case $opt in
        "Option 1")
            echo "you chose choice 1"
            ;;
        "Option 2")
            echo "you chose choice 2"
            ;;
        "Option 3")
            echo "you chose choice $REPLY which is $opt"
            ;;
        "Quit")
            break
            ;;
        *) echo "invalid option $REPLY";;
    esac
done

select

   - 메뉴 처리를 위해서 사용 

   - https://linuxize.com/post/bash-select/

 

문자열 대소문자 변경

변수 표현(${text})뒤에 아래 키워드를 붙이면 치환되는 형태

기호 설명
^ 첫 문자만 대문자로  변경
, 첫 문자만 소문자로 변경
^a 첫 문자가 a일 경우에만 첫문자를 대문자로 변경
,A 첫 문자가 A일 경우에만 첫문자를 소문자로 변경
^^ 문자열 전체를 대분자로 변경
,,  문자열 전체를 소문자로변경
^^a a 문자만 대문자로 변경
^^[a,b] a,b 문자만 대문자로 변경
,,A A 문자만 대문자로 변경
,,[A,B] 문자만 소문자로 변경 

#소문자를 대문자로

text="abcde"

echo ${text^}         #Abcde (첫 문자만 대문자로 변경)

echo ${text^^}        #ABCDE (문자열 전체를 대문자로 변경

 

#특정 소문자만 대문자로

text="abcde abcde"
echo ${text^a}         #Abcde abcde (첫 문자가 a일 경우에만 첫 문자를 대문자로 변경)
echo ${text^[b,e]}     #abcde abcde (첫 문자가 b, e일 경우에만 첫 문자를 대문자로 변경)
echo ${text^^a}       #Abcde Abcde (특정 문자만 대문자로 변경)
echo ${text^^[b,e]}   #aBcdE aBcdE (특정 문자들만 대문자로 변경)

 

#대문자를 소문자로

text="ABCDE"
echo ${text,A}         #aBCDE (첫문자가 A일 경우에만 첫 문자를 소문자로 변경)
echo ${text,[B,E]}     #ABCDE (첫문자가 B, E 일 경우에만 첫 문자를 소문자로 변경)
echo ${text,}           #aBCDE (첫문자만)
echo ${text,,}          #abcde  (문자열 전체)

 

#특정 대문자만 소문자로

text="ABCDE ABCDE"
echo ${text,A}        #aBCDE ABCDE (첫 문자가 A일 경우에만 첫 문자를 소문자로 변경)
echo ${text,[B, E]}    #ABCDE ABCDE (첫 문자가 B 또는 E일 경우에만 첫 문자를 소문자로 변경)
echo ${text,,A}       #aBCDE aBCDE  (문자열 전체에서 A만 소문자로 변경)
echo ${text,,[B, E]}   #AbCDe AbCDe (문자열 전체에서 A, B만 소문자로 변경)

 

파일에서 문자열 치환

sed 's/abcd/1234/g' text1.txt

특정 문자열이 포함된 라인 삭제

sed -i "/error_code/d" line_change

- error_code가 포함된 라인은 삭제 한다.

- sed 에서 " " 로 감싸주어야 bash에서 실행이 된다.

특정 라인에 문자열 추가

sed -i '2 i "넣을 문자열"' test.log

- 2를 라인 번호를 나타낸다.

- i 는 insert 하겠다.

- a 는 append 하겠다.

#!/bin/bash

function SetInfoToProductUpInfo()
{
    key=$1
    value=$2
    line_number=`cat test.log | grep -n ${key}= | awk -F':' '{print $1}'`
 
    if test ! -z ${line_number};then
        sed -i "/^${key}/d" test.log
        line_number_orig=${line_number}
        line_number=`expr ${line_number} - 1`
 
        if test 0 -eq $line_number;then
            sed -i "${line_number_orig}i ${key}\=${value}" test.log
        else
            sed -i "${line_number}a ${key}\=${value}" test.log
        fi
    else
        echo "${key}=${value}" >> test.log
    fi
}

SetInfoToProductUpInfo key "value"

 

함수 리턴 값 받기

function GetNewBuildInfo()
{
    TYPE=$1
 
    if test ${TYPE} = "product";then
        VERSION=$(cat info | grep Number | awk -F "=" '{print  $2}')
        echo "${VERSION}"
    fi
    return 0
 
}
VERSION=$(GetNewBuildInfo "product") #echo에 대한 값이 들어간다.
EXIT_CODE=$?  #return에 대한 값이 들어간다.

 

파일명 구하기

1. Path 제거하고 file 명만 추출

$ s=/the/path/foo.txt
$ echo ${s##*/}
foo.txt
 

2. 파일명에서 확장자 제거

    - (확장자가 .txt 에만 동작함. "basename foo.txt .txt" 와 동일)

$ s=foo.txt
$ echo ${s%.txt}
foo

 

3. . 뒤에 붙은 임의의 확장자 제거

$ s=foo.txt
$ echo ${s%.*}
foo

 

trap 사용법

- trap은 bash script에서 signal을 가로채서 처리하는 방법입니다. 

- 또는 bash script 종료시 exit을 가로체서 마지막에 실행 할 코드를 처리 할 수 있게 해줍니다. 

- 아래 코드는 TestCode를 실행해서 발생한 exit 11을 ExitCode에서 마지막에 처리하는 코드 입니다.

#!/bin/bash
 
ExitCode()
{
    input=$?
    echo "Exit Code : ${input}"
}
 
 
TestCode()
{
    exit 11
}
 
trap "ExitCode" EXIT
 
(TestCode) || exit $?

 

패턴 찾기 

if [[ "$AA" == *"name"* ]];then
    echo "1st find it"
fi
728x90
반응형