Search
Duplicate
📒

노트 템플릿 시리즈

수업
Linux
주제
5 more properties
참고

1. 목차

NOTE
대부분의 서버가 유닉스 체계로 이루어지며 쉘 스크립트로 이루어지므로, 구성 파일을 자동화 하기 좋다. 테스트 실패로인한 CI구성등, bash만 작성할줄 알면 빠르게 문제해결 가능
Bash를 효율적으로 배우자
Bash 스크립트를 작성하면 파일 디렉토리와 통신하기 좋다.
코딩연습을 해보자
명령어와 명령어를 담은 코드를 실행하는 방법
실행파일음 다는것은 비대화형, 직접 명령어를 사용하는건 대화형
둘의 차이점이 존재한다.
Terminology
이 과정을 마치면 다양한 강의에서 스크립트를 예제로 볼 수 있습니다. 대부분의 스크립트는 bash 쉘이 설치되어 있는 한 시스템에서 실행할 수 있도록 작성되고 상세하게 작성되었습니다. 실행 가능한 스크립트 샘플에는 스크립트 애니메이션 상단에 스크립트 이름이 있는 헤더와 강조 표시된 코드 구문이 있습니다.
이 과정은 Bash 버전 5.2에 최적화되어 있으며 대부분의 과정에서는 sed, find, grep 등과 같은 다양한 명령줄 유틸리티의 GNU 버전을 활용합니다. 그러나 대부분의 스크립트는 MacOS 또는 Git과 같은 Windows Bash 포트에서 제대로 실행됩니다. 배쉬 또는 Cygwin.
시스템에서 사용 가능한 bash 버전을 확인하려면 다음 명령을 사용할 수 있습니다.

목차

NOTE
쉘 규칙, 컨벤션
컨벤션을 일관성을 위해 꼭 피료아핟
패턴, 코드 프로젝트, 스타일
포맷팅, 구조짜기 등 다양한 방법으로 지킬 수 있다.
변수
상수사용에 대한 설명, 읽기전용으로 할것 (수정되면 안됨)
함수
소문자 카멜케이스로 이름 작성
calculate_area() { } # 중괄호 확장 # 일반적으로 중괄호 확장인 변수는 ""로 덮는다. # 탭 스페이스 라인 브레이크 등을 사용할때는(파일이름, 경로) "" 쓰자 var="value of var" ehco ${var} ./var-sample.sh # value of var --- height=170 echo "Your height is = $heightcm" # Your height is = echo "Your height is $height}cm" # Your height is = 170cm
Bash
복사
#!/bin/bash readonly SERVERS="server1 server2 server3" for server in ${SERVERS}; do echo "${server}.kodekloud.com" done
Bash
복사
Non-interactive shell refers generally to executing commands using which method:
Invoking commands through running scripts from files
Which of the following are acceptable function names from a conventions standpoint according to the recommendations from this course:
calculate_area() {},clone_repo() {}
What is the definition of “Following a coding convention” in the context of a coding language?
All of the options are correct

목차

NOTE
function 키워드 안써도 결과같으니 왠만하면 쓰지마라
함수
코드블록을 캡슐화한다.
특정작업을 자동화?
basename abc/def/ghi/filename.txt .txt find /home/bob/git/solar-system-9/ -type f | wc -l
Bash
복사
find 명령어
type -f ⇒ 파일만 검색한다.
wc
텍스트 파일의 줄 수, 단어 수, 문자 수 등을 카운트하는 데 사용됩니다.
echo "First argument : $1" echo "Second argument : $2" echo "Third argument : $3" echo "First argument : $1" shift echo "Second argument : $1" shift echo "Third argument : $1" ./shift-example.sh e1 e2 e3 First argument : e1 Second argument : e2 Third argument : e3 First argument : e1 Second argument : e2 Third argument : e3
Bash
복사
#!/bin/bash project=${1} branch=${2} project_dir="$(basename ${project} .git)" clone_project() { if [ ! -d "/home/bob/git/${project_dir}" ]; then cd /home/bob/git/ git clone ${project} fi } git_checkout() { cd "${project_dir}" git checkout "${branch}" } find_files() { find . -type f | wc -l } clone_project git_checkout find_files
Bash
복사
명령어 라인 인자값
인자값은 최대 1048576개가 가능하다.
내장형 명령은 PID를 생성하지 않는다 (더 자세히 알아볼것)
ps -ef | grep bash
Bash
복사
쉡 스크립트는 리눅스를 자동화하기 위해 사용한다.
각 프로세스는 중단할 수 있고 다시 시작할 수 있다.
TTY ⇒ 사용자가 터미널 인터페이스와 통신한다.
pid, nohub등의 명령어개념이 나옴
-ef의 명령어는 프로세스의 정보를 나타냄
kill 종료시킴
내장된 명령어와, 아닌것의 차이점
내장명령이 더 효율적임
키워드는 일반적으로 제어 블록 문장, 또는 if, while, for 등과 같은 명령 또는 스크립트의 동작을 변경하는 특수 단어와 관련됩니다.
셸 내장 명령은 셸에 미리 패키징된 실행 프로그램입니다.
이중 대괄호 쓰는게 더좋음
compgen -k | wc -l if then else elif fi case esac for select while until do done in function time { } ! [[ ]]
Bash
복사
Guard caluse
코드 가독성을 위한 작성방법
And, Or의 경우 앞의 조건에 따라 일찍끝나게할 수 있다.
#!/bin/bash project="${1}" branch="${2}" if [[ -z "${project}" ]]; then echo "Error: Git project not specified" exit 1 fi project_dir="$(basename ${project} .git)" clone_project() { if [ ! -d "/home/bob/git/${project_dir}" ]; then cd /home/bob/git/ git clone "${project}" fi } git_checkout() { cd "/home/bob/git/${project_dir}" if [[ ! -z "${branch}" ]]; then git checkout "${branch}" || echo "Error: Branch ${branch} doesn't exist in ${project}." exit 1 ; exit 1 fi } find_files() { find . -type f | wc -l } clone_project git_checkout find_files
Bash
복사

스트림

NOTE
1은 stdarnd output, 2는 standarn error
/dev/null 2>&1 ./script/fd-practice1.sh > ./results/stdout.txt 2> ./results/stderr.txt
Bash
복사
File Descriptor 2를 /dev/null로 리디렉션하여 표준 오류 메시지를 사일런싱할 수 있습니다.
Bash
복사
데이터를 파일로 리디렉션할 목적으로 표준 출력 또는 표준 오류를 잡으려면 리디렉션 기호 앞에 File Descriptor 번호를 배치하면 됩니다. 코드는 다음과 같습니다:
표준 오류 리디렉션
ls -j 2> stderr.txt
표준출력 방향전환
ls -l > stdout.txt
참고: Standard Output의 리디렉션에는 기본적으로 리디렉션 기호 앞에 보이지 않는 1이 있으므로 명시적으로 입력할 필요가 없습니다.*
파일 설명자 변환
파일 디스크립터를 한 유형에서 다른 유형으로 변환하려면 리디렉션보다 큰 기호의 오른쪽에 있는 앰퍼와 기호를 구문에 추가한 다음 File Descriptor 번호를 입력합니다:
Stdout을 Stderr로 변환
echo "이 표준 출력 에코를 표준 오류로 바꾸고 있습니다" >&2
Stderr을 Stdout으로 변환
ls -j 2>&1
파일 디스크립터를 장소로 잡는 것과 파일 디스크립터를 반대 형식으로 변환하는 것의 차이를 관찰합니다.

목차

NOTE