+ 한국항공대학교 최차봉 교수님의 임베디드 SW 과목 내용을 정리한 글입니다.
< 첫 번째 실습 - 터미널 시작 때마다 표시 설정 >
터미널이 시작될 때마다 다음과 같이 표시되도록 환경을 설정하라.
=> vi .bashrc : 터미널이 시작될 때마다 실행되는 .bashrc 파일을 수정한다.
echo ${LOGNAME^^} '!!!' # !를 사용할 때는 ''사용할 것
echo $(pwd)
끝 부분에 위 내용을 추가한다.
< 두 번째 실습 - 문자열 자르기 >
$PATH 값을 읽어서 한 줄에 한 PATH씩 출력하라 (cut 명령어와 while 반복문을 이용)
#!/bin/bash
# display path one by one from $PATH
i=1
a=$(echo $PATH | cut -d ':' -f $i)
# a의 초기 값: PATH값을 ':'기준으로 자른 배열의 1번째 요소
while [ -n "$a" ] # a가 널 값이 아닐 동안 반복
do
echo $a # a값 출력
((i++)) # i값 증가
a=$(echo $PATH | cut -d ':' -f $i)
# $PATH값을 ':' 기준으로 자른 배열의 i번째 요소로 업데이트
done
< 세 번째 실습 - 중복된 이름의 디렉토리 생성하기 >
오늘 날짜를 사용한 백업 디렉토리를 생성하라. (date +"%y%m%d" 명령어 사용)
ex) back220922
동일한 이름의 디렉토리가 존재하면 "back220922(1)"과 같이 다른 이름으로 생성하라.
+ 괄호 안의 숫자가 가장 큰 디렉토리가 가장 최근에 생성된 디렉토리이다.
#!/bin/bash
# 생성하려는 이름의 디렉토리 임시 저장
tmp_dir=back$(date +"%y%m%d")
# 현재 위치에 tmp_dir가
if [ ! -d $tmp_dir ] # 존재하지 않는다면
then
dir=$tmp_dir # tmp_dir 이름으로 생성
else # 존재하면
nu=1
while [ -d $tmp_dir\($nu\) ] # tmp_dir(nu)가 현재 위치에 이미 존재하면 반복
do
((nu++))
done
dir=$tmp_dir\($nu\)
fi
mkdir $dir # 정한 이름으로 디렉토리 생성
""안에서 괄호를 사용할 시 \을 사용하지 않아도 정상적으로 사용이 가능하다.
< 네 번째 실습 - 백업 디렉토리에 파일 복사하기 >
세 번째 실습을 이용하여 백업 디렉토리 생성하고, / 디렉토리 하위의 모든 .txt파일을 백업하라.
백업 디렉토리로 복사되는 파일명이 같을 경우 .txt(1)과 같이 파일 이름을 변경하여 복사하라.
+ 가장 나중에 복사된 파일명의 숫자 가장 크도록 한다.
#!/bin/bash
tmp_dir=back$(date +"%y%m%d")
if [ ! -d $tmp_dir ]
then
dir=$tmp_dir
else
nu=1
while [ -d "$tmp_dir($nu)" ]
do
((nu++))
done
dir="$tmp_dir($nu)"
fi
mkdir $dir
# 여기까지 세 번째 실습 코드
echo "$dir created ..." # 디렉토리 생성 표시
fres=$(sudo find / -name "*.txt")
# / 디렉토리 하위의 모든 txt파일을 찾아서 fres에 저장 (공백으로 구분)
i=1 # 공백으로 구분된 fres를 i번째 요소로 접근
a=$(echo $fres | cut -d ' ' -f $i)
# a는 fres를 공백을 기준으로 자른 i번째 요소 (경로 + 이름)
while [ ! -z $a ] # a가 널이 아닐 동안 반복
do
fn=$(basename $a) # 경로와 이름이 포함된 a값에서 이름만 추출
if [ ! -f $dir/$fn ] # dir 디렉토리 안에 fn이란 이름이 존재하지 않는다면
then
cp $a $dir # dir에 a를 복사
echo "$a copied..." # 복사 확인 메세지 출력
else
j=1
while [ -f $dir/$fn\($j\) ] # dir에 fn(j) 파일이 있는 동안 반복
do
((j++)) # j 증가
done
cp $a $dir/$fn\($j\) # a를 dir 디렉토리에 fn(j)이름으로 복사
echo "$dir/$fn($j) copied..."
fi
((i++)) # i 증가 -> fres의 그 다음 요소 접근
a=$(echo $fres | cut -d ' ' -f $i)
done
< 다섯 번째 실습 - 복사할 디렉토리와 백업 파일 지정 >
네 번째 실습의 ShellScript에서 인자로 복사할 상위 디렉토리와 백업할 파일 형식을 지정하라.
#!/bin/bash
tmp_dir=back$(date +"%y%m%d")
if [ ! -d $tmp_dir ]
then
dir=$tmp_dir
else
nu=1
while [ -d $tmp_dir\($nu\) ]
do
((nu++))
done
dir=$tmp_dir\($nu\)
fi
mkdir $dir
# 여기까지 세 번째 실습 코드
echo "$dir created ..." # 디렉토리 생성 표시
fres=$(sudo find $1 -name "$2")
# / 디렉토리 하위의 모든 txt파일을 찾아서 fres에 저장 (공백으로 구분)
i=1 # 공백으로 구분된 fres를 i번째 요소로 접근
a=$(echo $fres | cut -d ' ' -f$i)
# a는 fres를 공백을 기준으로 자른 i번째 요소 (경로 + 이름)
while [ ! -z $a ] # a가 널이 아닐 동안 반복
do
fn=$(basename $a) # 경로와 이름이 포함된 a값에서 이름만 추출
if [ ! -f $dir/$fn ] # dir 디렉토리 안에 fn이란 이름이 존재하지 않는다면
then
cp $a $dir # dir에 a를 복사
echo "$a copied..." # 복사 확인 메세지 출력
else
j=1
while [ -f $dir/$fn\($j\) ] # dir에 fn(j) 파일이 있는 동안 반복
do
((j++)) # j 증가
done
cp $a $dir/$fn\($j\) # a를 dir 디렉토리에 fn(j)이름으로 복사
echo "$dir/$fn($j) copied..."
fi
((i++)) # i 증가 -> fres의 그 다음 요소 접근
a=$(echo $fres | cut -d ' ' -f $i)
done
+ while [ ! -z $a ] 을 사용할 것 (while [ -n $a ]은 무한 루프에 걸린다.)
-z 는 공백을 길이가 0으로 간주한다.
'Computer Science > Embedded Software' 카테고리의 다른 글
[Embedded Software] Embedded System 개발 실습 (0) | 2023.09.21 |
---|---|
[Embedded Software] Embedded System 개발 (example) (1) | 2023.09.19 |
[Embedded Software] Shell Script (0) | 2023.09.13 |
[Embedded Software] Linux Commands 실습 (3) | 2023.09.08 |
[Embedded Software] Linux Basic Commands (0) | 2023.09.06 |