Linux Shell 의 필요성
🟢 시간 절약
🟢 클라우드, 가상화와 연계된 작업진행 (자동화)
🟢 리눅스 시스템과의 유연한 연계(shell, python, perl)
🚨 BUT: 다차원배열이나 GUI와의 연계시 사용이 어려움
✔️ 인터프리터 언어: 파일의 상단부터 하단으로 한줄씩 차례대로 처리 (=python)
✔️ Shell Script: 한 종이에 사용자로부터 입력을 받기 위한 명령문이나 다양한 실행문 삽입 가능
Shell script
🔴👌 스크립트 실행 전, chomod 777 권한 조정 필요
🔴👌 #!/bin/bash :쉘스크립트 파일 가장 첫번째 줄에 적기
🔴👌 ./test1 : /bin/bash를 현재 위치로 가져와 실행하라는 뜻
#!/bin/bash
date
echo "-----------------------------------------------------"
echo ""
who
echo "---------------------finished------------------------"
다양한 옵션
여러 명령 사용하기
; : 앞의 명령의 결과가 비정상적인 결과여도 계속 진행
&& : 앞의 명령이 정상적인 결과여야 뒤의 명령도 실행
명령줄 한 줄에 출력하기 -n
# echo -n "What is your name? " :
Redirection
간단히 말해 표준 출력, 입력, 에러의 방향을 다르게 하는 것
$ date
Sun Jun 21 21:14:30 EDT 2020 # 원래는 모니터로 출력되지만
$ date > date.txt # 입력의 방향을 텍스트파일로 재설정: 리다이렉션
$ cat date.txt
Sun Jun 21 21:15:02 EDT 2020
표준입력(stdin) 은 키보드로 입력하는데, 파일 디스크립터 숫자 0으로 지정되어있다.
표준출력(stdout)은 모니터로 출력되는데, 파일 디스크립터 숫자 1로 지정되어있다.
표준에러(stderr)은 모니터로 출력되는데, 파일 디스크립터 숫자 2로 지정되어있다.
✔️ 파일 디스크립터 숫자 : 프로세스에서 열린 파일의 목록을 관리하는 테이블의 인덱스
변수 선언
# 전역변수 확인#
$ env
$ printenv
# export 활용하여 전역변수 설정 & 대문자 사용 #
$ export TEST="testing"
# A=B 형식으로 지역변수 설정 #
$ test=testing
----------------------
$ VAR="test"
$ echo $VAR
test
$ VAR = "test"
bash: VAR: command not found... # 띄어쓰기 no 허용
-----------------------
$ unset VAR
# 환경변수 취소
배열
여러 값을 저장할 수 있는 변수
$ test=(ONE TWO THREE FOUR FIVE)
$ echo $test # 배열의 주소값[0]에 있는 인수 출력
ONE
$ echo ${test[2]}
THREE
$ test[2]=third # 배열 값 변경
$ echo ${test[*]} # 배열 모든 값 출력
ONE TWO THIRD FOUR FIVE
$ unset test[2]
$ echo ${test[*]}
ONE TWO FOUR FIVE
$ echo ${test[2]} # 2번째 자리는 값 없이 비어있는 상태"
$ echo ${test[3]} # 중간 자리가 사라진다고해서 뒤에 있는 값이 당겨오지 않음
FOUR
$ unset test
"test라는 변수 아예 삭제"
-------------------
$ set MON TUE WED
$ echo $1
MON
$ echo $2
TUE
$ shift # 왼쪽으로 당겨당겨: 맨 왼쪽에 있는 데이터는 폐기
$ echo $1
TUE