자율주행/김선영님의 리눅스 강의

리눅스 day6(bash)

Tony Lim 2020. 12. 14. 20:14

Shell에서 실행되는 Unix 명렁어는 sub-shell이 생성되어 실행된다.

외부 명렁어 실행은 기본적으로 sub shell을 생성하므로 ,  process 생성의 overhead가 존재한다.

bash(Parent process) =>(fork) => bash:sub-shell(child process) => (exec) => ls-al(child process) 
마지막 child process가 exitcode($? ,return code) 를 Parent process에게 리턴한다

 zombie process 는 이미 안의 코드는 끝나서 os가 메모리를 회수해 갔지만 meta data만 남아있는 상태이다. 이 경우에는 parent process 에 문제가 있는 것이다.

rm --force 옵션은 강제하는것이 아니라 return code(exit code)를 0으로 강제하는 것이다.

Variable

name=value // 띄어쓰기를 하면 command로 인식함 고로 띄어쓰기 하면안된다.

export MY_EVN_VAR="something" // 환경 변수는 관습적으로 대문자를 쓴다. 

export EDITOR=vim // ^X^E 를 누르면 vim 이 실행이되고 거기다 치면 그게 shell 에친것처럼 결과값을 리턴한다.

프로세스가 종료되면 shell 변수의 메모리 공간도 당연히 해제된다. permanency를 제공할려면
rc (run command, runtime config.) 나 profile에 변수의 값으 ㄹ저장 시켜야한다. == bash가 실행될떄마다 파일을 읽어드리는 것이다.
.bashrc , .bash_profile == 데비안 계열, RH 계열 

bash 가 실행 되는 방법은 여러가지인데 
sh로 실행하면 POSIX standard mode로 실행되며 /etc/profile, ~/.profile 순으로 탐색한다.

source 명렁어는 환경변수나 shell script를 현재 shell에서 실행 (그냥 읽어온다) 

Bash

shell은 크게 3가지 가 있다. Login , Interactive , Non-Interactive

Login == 로그인 할떄 실행되는 shell , .profile .bash_profile, .bash_login 을 실행시킨다.

Interactive == 로그인한후에 bash command를 치면 .bashrc를 먼저 실행시키고 나머지를 실행한다.where you can interactively type or interrupt commands

Non-Interactive == A (sub)shell that is probably run from an automated process you will see neither input nor output when the calling process don't handle it. 

script file 은 관습적으로 *.sh 파일명을 가진다.

#!/bin/bash == 실행 shell 선언한다. 절대경로를 적어주어야 한다.

sh test.sh  == 옛날 POSIX standard mode로 잘 안쓰인다. bash 일부 기능의 작동을 보장할 수 없다.

. test.sh == sub shell을 생성하지 않으므로 위험하다.

bash test. sh 이나 execute 권한을 추가한 후에 ./test.sh 를 하는 것이 좋다. 

double quotation == var1="Your home directory is $HOME" 을 치면 안의 변수 값이 나오지만

single quotation 은 그냥 string 이 나온다.

String , Array 

${#var} == string의 길이
${#var:2} == 2번째 index부터 끝까지
${var:2:3} == 2번째 index부터 3개까지
${var:0:-2} == 처음부터 뒤에서 2개 삭제 한 것

declare -a array = ("hello world" , "linuxer" "Good Bye")
${#array[*]} == array의 길이
${array[0]} == 첫번째 원소

코드 실행결과

IFS를 아예선언을 안하면 tab, space , newline이 default로 선정되지만 IFS= 를 null 로 설정하면 split perfome 하지 않는다.

또한 "va[@]" 는 각각 배열을 보여주지만 "va[*]" 은 배열을 하나의 string으로 보여준다.

'자율주행 > 김선영님의 리눅스 강의' 카테고리의 다른 글

리눅스 day7  (0) 2020.12.16
리눅스 day7(REGEX)  (0) 2020.12.16
리눅스 day5 (file sytem)  (0) 2020.12.11
리눅스 day4 (network)  (0) 2020.12.10
리눅스 day3 (Vim)  (0) 2020.12.09