bash 기초-2
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
을 주로 사용
- RH 곙ㄹ은
- 종료시
~/.bash_logout
실행
non-login shell
- import ~/.bashrc
-f
: 있는지 없는지.
./text.sh
bash text
source ./bash # source 로 하면 i 가 켜진다.
- i 가 켜져있으면, 인터렉티브 쉘로 작동
summary
- interactive : 현재 쉘에서 바로 실행
- non-interactive : 스크립트 모드로 실행
- .bash_profile : .bashrc와 다르게 로그인 상태에서만 작동
scripting
-
반복 실행을 쉽게 해준다.
-
script format
- 무조건
#!/bin/bash
써줘야한다. - 실행의 좋은 예
- 무조건
-
/bin/bash != /bin/sh
- /bin/sh 는 symlink 혹은 hardlink 이다.
- 예로 , sh에
<<
와 같은 확장 문법은 오류가 난다.
variable : scope
- shell 변수는 기본으로 전역변수이다.
local var_name[=value]
이런식으로도 지역변수를 설정 가능하다.-
공백이 있다면 quatation으로 묶어줘야한다.
ehll = "hello word"
- ”” 로는 $ 가 해석이 되지만, ‘’ 는ㄴ 안에 있는 모든 특수문자를 문자열로 인식한다
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
나 똑같은 명령! -
산술 연산자
-
파일 테스트
0
dlaus 성공,1
이면 실패,2
면missing
-
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의 뒤에 붙여라
control : while
-
세번째가 제일 많이 쓰인다.
idx = 10
while [ $idx -ne 0 ]; do
echo "idx = $idx"
idx= `expr $idx -1` # `` 안에 있는 명령어 실행
# 또는
idx = $(expr $idx -1)
done
foreach
-
iterator에 배열의 값이 순서대로 들어오는 것.
for i in `seq 1 10`
do
echo "sequence : $i"
done
select
-
메뉴 선택을 위한 기능
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
-
첫번째줄보단 두번째 줄처럼 쓴다.
-
${#va[@]}
는 자동으로 길이를 리턴하므로 계속적으로 추가하고 인덱스가 업데이트 된다.
special parameter
-
빨간색은 중요!
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}