3 minute read

fork룰 통해 자식을 만들어서,,, 부모 프로세스한테 리턴 콜..

shell : zombie

![[no-alignment]](https://happyobo.github.io/assets/Linux/shell.png){: .align-center}

variable : space

  • 공백은 중요하다..!

  • environment var
  • environment var : EDITOR
    • export EDITOR = vim
    • ctrl+ X 또는 ctrl + e 를 누르면 설정한 에디터가 뜬다!
  • environment var : PATH

bash : invoking type

  • Authentication 과정에 따른 분류 : login shell, non-login shell
  • Command-execution 방식에 따른 분류 : interactive shell, non-interactive shell
  • 총 세가지가 있다.

invoking mode : login shell

  • import /etc/profile
    • global profile (로그인 환경을 설정한다.)
  • ~/.bash_profile, ~/.bash_login, ~/.profile 순으로..
    • RH 곙ㄹ은 .bash_profile을 주로 사용
    • Debian 계열은 .profile을 주로 사용
  • 종료시 ~/.bash_logout 실행

non-login shell

  1. import ~/.bashrc
    • -f : 있는지 없는지.

    [no-alignment]

./text.sh
bash text
source ./bash # source 로 하면 i 가 켜진다.
  • i 가 켜져있으면, 인터렉티브 쉘로 작동

summary

  • interactive : 현재 쉘에서 바로 실행
  • non-interactive : 스크립트 모드로 실행
  • .bash_profile : .bashrc와 다르게 로그인 상태에서만 작동

scripting

  • 반복 실행을 쉽게 해준다.

  • script format

    [no-alignment]

    • 무조건 #!/bin/bash 써줘야한다.
    • 실행의 좋은 예

    [no-alignment]

  • /bin/bash != /bin/sh

    • /bin/sh 는 symlink 혹은 hardlink 이다.
    • 예로 , sh에 << 와 같은 확장 문법은 오류가 난다.

variable : scope

  • shell 변수는 기본으로 전역변수이다.
  • local var_name[=value] 이런식으로도 지역변수를 설정 가능하다.
  • 공백이 있다면 quatation으로 묶어줘야한다. ehll = "hello word"

    [no-alignment]

  • ”” 로는 $ 가 해석이 되지만, ‘’ 는ㄴ 안에 있는 모든 특수문자를 문자열로 인식한다
var3 = 'uname'
echo $var3
> Linux

var = " platform : `un`"
echo var
> platform : LInux
  • 둥근 따옴표로 인한 오류
    • 이상한 따옴표 코드가 있는데 엄연히 " 과 다르다..! 둥근 따옴표인지 확인해야한다.

control statements

if

if [ contidtion ]; then ... fi

  • condition의 앞뒤엔 공백이 있어야만한다.
if [ $TERM != "xterm-256color" ]; then
    ...

if vs test

[ $USER != "root" ] && echo "!root" # 참일 때만 && 뒤에 실행
  • []test 나 똑같은 명령!

  • 산술 연산자

    [no-alignment]

  • 파일 테스트

    [no-alignment]

    • 0 dlaus 성공, 1 이면 실패, 2missing
  • practiec : test :zero length

  • -z, -n 구문을 테스트 하는 방법

      if[ -z $var2 ]; then
          #var2가 선언 되지 않았거나 값이 empty일 때 실행 코드
      fi
    
      ## 에러사항
      [ $var=="hello" ] # 에러
      [ $var == "hello" ] # 참
    
  • [[ .. ]]를 사용하면 부등호에 이스케이프가 필요 없다.

if [ condition ]; then
elif [ condition ]; then
else
fi

if [ $$ -lt 1 ]; then # 인자 개수가 1보다 작다면
    echo "Usage : run-parts <dir>"
    exit 1
fi
    # 정상적으로 작동하지 않았다면 무조건 non- zero 리턴

case 구문

  • 다중 상태 분기
case $answer in
y*|Y*)
    commands...
    ;; # break
n*|N*)
    commands..
    ;; #break
*) 
    echo "잘못된 입력입니다."
    ;;
    #default
esac

! -d "$1" # 디렉터리가 아닌지 맞는지

  • after 가 있으면 path의 뒤에 붙여라

    [no-alignment]

control : while

  • 세번째가 제일 많이 쓰인다.

    [no-alignment]

idx = 10
while [ $idx -ne 0 ]; do
    echo "idx = $idx"
    idx= `expr $idx -1` # `` 안에 있는 명령어 실행
    # 또는
    idx = $(expr $idx -1)
done

foreach

  • iterator에 배열의 값이 순서대로 들어오는 것.

    [no-alignment]

for i in `seq 1 10`
do 
    echo "sequence : $i"
done

select

  • 메뉴 선택을 위한 기능

    [no-alignment]

sum=0
iter=0
while [ $iter -le 100 ];
do
    sum= `expr $iter + $sum`
    iter=`expr $iter + 1`
done
echo $sum

variables : offset, length

  • 변수의 일부분, 혹은 길이를 알아내는데 사용하느 방법
  • ${#name} : 변수의 길이
  • ``${name:offset} : 변수의 offset위치부터 출력
  • ``${name:offset:len} : 변수의 offset위치부터 len길이만큼 출력, len이 음수일 경우에는 뒤에서부터 계산한다.
$ myname=sunyzero
$ echo ${#name}
> 8

$ echo ${myname:2}
> nyzero

integer /array

  • declare -i varname : 정수 변수형 선언
  • declare -a varname=(value1 value2 value3) : 배열 변수형 선언
declare -a var_arr = ("h" "lin" "good" )
echo ${#var_array[*]}
> 3
echo ${var_arr[0]}
hello
  • 첫번째줄보단 두번째 줄처럼 쓴다.

    [no-alignment]

  • ${#va[@]} 는 자동으로 길이를 리턴하므로 계속적으로 추가하고 인덱스가 업데이트 된다.

    [no-alignment]

special parameter

  • 빨간색은 중요!

    [no-alignment]


echo "argc : $#"

if [ $# -eq 0 ]; then
    echo "Usage"
    exit 1
fi
echo "argv[0] : $0"

for i in "${*:1}"; do
    echo "$i"
done

quat example

![[no-alignment]](https://happyobo.github.io/assets/Linux/ex_quat.png){: .align-center}

Categories:

Updated: