실행 결과를 바로 읽어서 한 줄씩 처리 하기
#!/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
'프로그래밍 > 리눅스 프로그래밍' 카테고리의 다른 글
[cmake] cmake 기초 부터 활용 까지 (0) | 2021.06.17 |
---|---|
[bash] 알면 좋은 팁!! (0) | 2021.06.07 |
[cross-platform] ld-linux-x86-64.so 란 (0) | 2020.11.03 |
[time] Linux - UTC vs Unix Time vs Local time의 차이 (0) | 2020.04.28 |
[tmux] 1. tmux 개념 및 설치 및 설정 변경 ~/.tmux.conf (0) | 2020.04.04 |