쉘 스크립트란?, 쉘 스크립트 작성하기
개요
- 요새 면접 스터디를 하면서 스터디 과제를 깃허브에 정리하고 있다.
- 스터디 전후에도 계속 공부하려고 정리하고 있는데, 정리하는 것이 굉장히 단순 반복 작업이라 귀찮아 죽겠다..
- 제일 귀찮은게 구글시트에서 스터디 주제를 복사 -> 복사한것에 공백을 하나씩 제거 후 제목마다 * 달기 -> 과목 파일에 제목들 넣고, 링크 만들어주기 -> 내용마다 ### 달아주기
- 이 부분을 쉘 스크립트를 이용해서 제목들만 입력하면 알아서 만들어주고, 나는 copy&paste 할수있게 하려고한다.
스크립트란?
- 일반적으로 Interpret 방식으로 동작하는 컴파일 되지 않는 프로그램
- text형식으로 저장되는 프로그램, 한 줄씩 순차적으로 읽어서 실행 되도록 작성된 프로그램
- 종류 : 쉘 스크립트, 자바 스크립트, 펄 스크립트 등
- 스크립트를 읽어 실행해주는 인터프리트 엔진 에 따라 나뉜다.
- 쉘 스크립트 : 운영체제의 쉘(bash, ksh, csh..)
- 자바 스크립트 : 웹브라우저
- 펄 스크립트 : perl
코드
#! /bin/bash
########################
## 과목별로 실행 해준다
########################
function solution(){
# 1. 목록에 * 달아 주기
i=0
for list in "${lists[@]}"; do
if [ $i -ne "0" ]
then
echo "* $list"
fi
i=$((i+1))
done
echo ""
# 2. * 제목 입니다(#제목-입니다) ; 형태로 만들기
i=0
answer=""
for list in "${lists[@]}"; do
# 공백 정확히 입력해야 if문 오류안난다
if [ $i -ne "0" ]
then
# tr은 치환한것을 echo만 해줄뿐, 치환한것을 변수에 저장 못한다
# 따라서 echo한것을 answer에 입력
answer=$(echo "(#$list)" | tr ' ' '-')
echo "* [$list]${answer}"
fi
i=$((i+1))
done
echo ""
# 3. ### 달아주기
i=0
for list in "${lists[@]}"; do
if [ $i -ne "0" ]
then
echo "## $list";
fi
i=$((i+1))
done
echo ""
# 4. 태그 달아주기
type=${lists[0]}
tag="> :arrow_double_up:[Top](#${type})
\n:leftwards_arrow_with_hook:[Back](https://github.com/devham76/tech-interview-studyw#${type})
\n:information_source:[Home](https://github.com/devham76/tech-intervie-studyw#tech-interview)"
echo -e $tag # 줄바꿈유지
echo ""
echo "-------------------------------------"
echo ""
}
########################
## 1. 파일 돌면서 공백이 나오기 전까지 실행
########################
# 1. file.txt 파일에 있는 목록 읽기
lists=()
i=0
while read LINE; do
# 해당 줄이 공백이 아니면 계속 읽는다
if [ -z "$LINE" ];
then
solution $lists[@]
lists=()
i=0
else
# 공백 포함시, 따옴표 필수
lists[$i]="${LINE}"
i=$((i+1))
fi
done < file.txt
결과
$ cat file2.txt
3-os
this 키워드
자바에서 tcp udp 소켓 생성 방법
리틀엔디안 빅엔디안
Reflection
oop 5대 원칙
2-network
iocp
http keep alive / tcp keep alive
ssl
tcp udp 패킷구조 차이점
리피터, 허브, 브릿지, 라우터와 L2, L3, L4, L7 스위치 차이점
//----------------------------
$ sh start.sh
* this 키워드
* 자바에서 tcp udp 소켓 생성 방법
* 리틀엔디안 빅엔디안
* Reflection
* oop 5대 원칙
* [this 키워드](#this-키워드)
* [자바에서 tcp udp 소켓 생성 방법](#자바에서-tcp-udp-소켓-생성-방법)
* [리틀엔디안 빅엔디안](#리틀엔디안-빅엔디안)
* [Reflection](#Reflection)
* [oop 5대 원칙](#oop-5대-원칙)
## this 키워드
## 자바에서 tcp udp 소켓 생성 방법
## 리틀엔디안 빅엔디안
## Reflection
## oop 5대 원칙
> :arrow_double_up:[Top](#3-os)
:leftwards_arrow_with_hook:[Back](https://github.com/devham76/tech-interview-studyw#3-os)
:information_source:[Home](https://github.com/devham76/tech-intervie-studyw#tech-interview)
-------------------------------------
* iocp
* http keep alive / tcp keep alive
* ssl
* tcp udp 패킷구조 차이점
* 리피터, 허브, 브릿지, 라우터와 L2, L3, L4, L7 스위치 차이점
* [iocp](#iocp)
* [http keep alive / tcp keep alive](#http-keep-alive-/-tcp-keep-alive)
* [ssl](#ssl)
* [tcp udp 패킷구조 차이점](#tcp-udp-패킷구조-차이점)
* [리피터, 허브, 브릿지, 라우터와 L2, L3, L4, L7 스위치 차이점](#리피터,-허브,-브릿지,-라우터와-L2,-L3,-L4,-L7-스위치-차이점)
## iocp
## http keep alive / tcp keep alive
## ssl
## tcp udp 패킷구조 차이점
## 리피터, 허브, 브릿지, 라우터와 L2, L3, L4, L7 스위치 차이점
> :arrow_double_up:[Top](#2-network)
:leftwards_arrow_with_hook:[Back](https://github.com/devham76/tech-interview-studyw#2-network)
:information_source:[Home](https://github.com/devham76/tech-intervie-studyw#tech-interview)
-------------------------------------