인터프리터/스크립트 언어의 한 종류입니다. 모든 스크립트언어가 그렇듯 해석기인 shell 프로그램이 설치되어있어야합니다.
below shell
<aside> 🛠
Shell script란?
| Linux | Window | 내용 |
|---|---|---|
| &&, -a | -and | 논리연산자 AND |
| , -o | ||
| ! | -not | 논리연산자 NOT |
| + | 좌동 | 산술연산자 plus |
| - | 좌동 | 산술연산자 minus |
| * | 좌동 | 산술연산자 times |
| / | 좌동 | 산술연산자 slash |
| ** | 좌동 | 산술연산자 exponentiation(누승), power |
| % | 좌동 | 산술연산자 modulo, mod(나머지) |
| += | 좌동 | 산술연산자 plus-equal |
| -= | 좌동 | 산술연산자 minus-equal |
| *= | 좌동 | 산술연산자 times-equal |
| /= | 좌동 | 산술연산자 slash-equal |
| %= | 좌동 | 산술연산자 mod-equal |
| -eq | -eq | 정수-비교연산자 equal |
| -ne | -ne | 정수-비교연산자 not-equal |
| -gt 혹은 > | -gt | 정수-비교연산자 greater-than |
| -ge 혹은 >= | -ge | 정수-비교연산자 greater-than-equal |
| -lt 혹은 < | -lt | 정수-비교연산자 less-than |
| -le 혹은 <= | -le | 정수-비교연산자 less-than-equal |
| = 혹은 == | 좌동 | 문자열-비교연산자 equal |
| != | not … == | 문자열-비교연산자 not-equal |
| < | lss | 문자열-비교연산자 less-than |
| > | gtr | 문자열-비교연산자 greater-than |
| -z | ==”” | 문자열-비교연산자 the-end (문자열이 NULL, 길이가 0인 경우) |
| -n | not …==”” | 문자열-비교연산자 not-null |
| $(변수) | 구문 | 문자열-비교연산자 not-null |
| -e | 구문 | 파일-비교옵션 : 파일 존재 |
| -f | 구문 | 파일-비교옵션 : 파일 존재, 일반 파일(디렉터리/장치파일 아님) |
| -s | 구문 | 파일-비교옵션 : 파일 존재, 0보다 큰 경우 |
| -d | 구문 | 파일-비교옵션 : 파일 존재, 디렉터리인 경우 |
| -b | 구문 | 파일-비교옵션 : 파일 존재, 블록장치파일인 경우 |
| -c | 구문 | 파일-비교옵션 : 파일 존재, 캐릭터장치파일인 경우 |
| -p | 구문 | 파일-비교옵션 : 파일 존재, FIFO인 경우 |
| -h | 구문 | 파일-비교옵션 : 파일 존재, 심볼릭 링크 설정 1이상인 경우 |
| -L | 구문 | 파일-비교옵션 : 파일 존재, 심볼릭 링크 설정 1이상인 경우 |
| -S | 구문 | 파일-비교옵션 : 파일이 소켓디바이스인 경우 |
| -t | 구문 | 파일-비교옵션 : 파일이 디스크립터가 터미널 디바이스와 연관있음 |
| -r | 구문 | 파일-비교옵션 : 파일 존재, readable |
| -w | 구문 | 파일-비교옵션 : 파일 존재, writable |
| -x | 구문 | 파일-비교옵션 : 파일 존재, excutable |
| # | 좌동 | 문법기호 : 주석 |
| $변수사용 | $변수선언도 | 문법기호 : 대입연산자 앞뒤에 공백이 있으면 안됨, 변수 사용시에는 변수명앞에 $붙여서 호출 |
| function ${@} | 구문 | 문법기호 : 함수선언, function 함수명() { 함수내용 } 으로 선언, function은 생략가능, 인자값은 함수내용부부분에 ${@}로 사용할 부분표기, 함수사용시에는 함수명으로 사용하고, 공백을 두고 @에 들어갈 인자를 입력해줌 |
| $0 | 구문 | 위치매개변수 : 실행된 스크립트 이름 |
| $1 | ||
| $args[n] | 위치매개변수 : 1~8..9...식으로 인자순서대로 번호부여됨, 10부터는 {}로 감싸줘야함 | |
| $* | $args | 위치매개변수 : 전체 인자 값 |
| $@ | $args | 위치매개변수 : 전체 인자 값($*와 동일하지만 큰따옴표로 변수를 감싸면 다른 결과가 나옴) |
| $# | $args.Length | 위치매개변수 : 매개변수의 총 개수 |
| $$ | $PID | 위치매개변수 : 현재스크립트의 PID |
| $? | 좌동 | 위치매개변수 : 최근 실행된 명령어,함수스크립트 자식의 종료상태 |
| $! | 키워드X | 위치매개변수 : 최근에 실행한 백그라운드 명령의 PID |
| $- | 키워드X | 위치매개변수 : 현재 옵션 플래그 |
| $_ | 키워드X | 위치매개변수 : 지난 명령의 마지막 인자로 설정된 특수 변수 |
| array={"my","test","array","world"} | $array = @("my", "test", "array", "world") | 배열 : 선언 |
| array[4]="aoo" | $array[4] = "aoo” | 배열 : 특정요소 설정 |
| array=(${array[@]} "mydata") | $array += "mydata” | 배열 : 새로운요소 추가 |
| echo "${array[@]}" | Write-Output $array | 배열 : 전체출력 |
| echo "${array[@]}" | Write-Output $array.Length | 배열 : 전체개수출력 |
| unset array[4] | $array.RemoveAt(4) | 배열 : 특정요소제거 |
| unset array | $array = @() | 배열 : 전체요소제거 |
| declare -r var | Set-Variable -Name "var" -Value 10 -Option ReadOnly | 명시표현 : 읽기전용변수 (변수타입지정 미지정시 문자열취급 + 문맥따라자동변환후연산처리) |
| declare -i var=10 | [int]$var = 10 | 명시표현 : 정수형변수 (변수타입지정 미지정시 문자열취급 + 문맥따라자동변환후연산처리) |
| declare -a array_var | [array]$arrayVar = @() | 명시표현 : 배열형변수 (변수타입지정 미지정시 문자열취급 + 문맥따라자동변환후연산처리) |
| array_var=() | $arrayVar = @() | 명시표현 : 배열형변수 초기화 (변수타입지정 미지정시 문자열취급 + 문맥따라자동변환후연산처리) |
| declare -x var="?" | [Environment]::SetEnvironmentVariable("var", "value") | 명시표현 : 환경변수 (변수타입지정 미지정시 문자열취급 + 문맥따라자동변환후연산처리) |
| export var="?" | [Environment]::SetEnvironmentVariable("var", "value") | 명시표현 : 환경변수 (변수타입지정 미지정시 문자열취급 + 문맥따라자동변환후연산처리) |
| declare -f | Get-Command -CommandType Function | 명시표현 : 현재스크립트의전체함수를출력 (변수타입지정 미지정시 문자열취급 + 문맥따라자동변환후연산처리) |
| declare -f 함수이름 | Get-Command -Name 함수이름 | 명시표현 : 현재스크립트의지정된함수를출력 (변수타입지정 미지정시 문자열취급 + 문맥따라자동변환후연산처리) |
| $PATH | 환경변수 : 실행파일 검색 경로 | |
| $DISPLAY | 환경변수 : X윈도우라는 GUI를 사용가능한데, 거기서 디스플레이 위치/이름을 정하는 변수 (첫번째 윈도우의 초기값은 :0 ) | |
| $HOME | 환경변수 : 사용자 홈 디렉토리 (폴더) | |
| $PS1 | 환경변수 : 쉘(cmd호환, 커널과 사용자인터페이스, 명령어처리) 프롬프트의 설정값 | |
| $PWD | 환경변수 : 현재작업 디렉토리(폴더) | |
| $SHELL | 환경변수 : 사용하는 쉘프로그램 이름 | |
| $TERM | 환경변수 : 터미널 종류의 이름 (쉘은 터미널로 연결하여 수행됨) | |
| 환경변수 : 메일이 저장된 파일의 경로 | ||
| $MAIL_CHECK | 환경변수 : 메일의 도착여부를 검사하는 시간 간격 (초단위) | |
| $LANG | 환경변수 : 프로그램사용시 기본 지원되는 언어 | |
| $USER | 환경변수 : 사용자이름 | |
| getenv("변수") | 환경변수 : 값 확인 | |
| putenv("변수=값") | 환경변수 : 추가/수정 | |
| setenv("변수","값","덮어쓰기여부") | 환경변수 : 수정/취소, putenv와 비슷하나 덮어쓰기/취소하기 추가옵션 | |
| fork | 프로세스 : 새로운 프로세스 생성/복제 (상위/부모 프로세스를 복제하여 자식/하위 프로세스를 생성) | |
| exec | 프로세스 : 새로운 프로세스를 수행 (excute) | |
| wait | 프로세스 : fork후 exec로 실행한 프로세스의, 부모 프로세스가 자식프로세스의 종료등 event를 기다림, 일시 중지를 의미 | |
| kill | 프로세스 : 프로세스 제거 | |
| ps | 프로세스 : 현재 프로세스 상태확인 | |
| getpid | 프로세스 : 자신의 프로세스 아이디 가져오기 | |
| getppid | 프로세스 : 부모 프로세스의 아이디 가져오기 | |
| who | 현재 | |
| 시스템에 접속한 사용자 정보 출력 | 이하 정리필요~~~~~~~~~ | |
| pipe( | ) | 왼쪽의 명령어 리턴을 오른쪽에 인풋으로 전달 |
| sleep 숫자 | 입력받은 숫자만큼 대기 | |
| read 변수 | 변수에 프롬프트에서 입력한 값을 받는다 | |
| (( | ||
| )) / let | 이중괄호 사용시 혹은 let를 앞에 붙여줄시, 산술연산이 | |
| 가능해짐 //let sum += $변수 // ((sum += $변수)) | ||
| $변수 | 변수의 값 / 변수 / 변수의 이름 / 대입연산시 왼쪽에는 | |
| 변수의 이름이 위치해야함 | ||
| chmod | 파일 : 권한 모드(읽기,쓰기,실행) 설정 / 파일 접근 제한 ㄴ*(UNIX) 총 열자리 명령어에서 1은 -(파일) or d(폴더), 뒤에는 3글자씩 사용자-그룹-기타에게 rwx 읽기쓰기실행 권한 or - 미부여를 입력 | |
| chown | 파일 : 소유자 변경 | |
| find | 파일 : 찾기 |
쉘스크립트 확장자 .sh
실행방법 : ./파일이름.sh 인자(파일존재확인스크립트이므로 파일명)
#!/bin/bash //사용하는 명령어해석기는 bash쉘
file_name = $1 //입력된 두번째 항을 대입, 띄어쓰기를 기준해서 첫항은 0, 둘째항은 1 이런식...
if [ -f $file_name ]; then //-f 파일명 : 존재하면 참반환
echo "file does exist" //텍스트메시지 출력
else
echo "file doesn't exist"
fi
선택if문 : if/then / elif/then /else /fi 순서
선택switch문 : case변수 in / 값1) / 값2) / *) / esac
반복for문 : for 변수명 in 리스트 / do 반복할 코드 / done
반복while문 : while 조건식(참이면 반복) / do 반복할 코드 / done
반복until문 : until 조건식(참이 될때까지 반복, ==거짓이면 반복) / do 반복할 코드 / done
반복select문 : select 변수 in 선택1 선택2 ... / do / case $변수 in / 선택1) 구현부;; / 선택2) 구현부;; / *) 보기없는 선택지 ... / esac / done
select 어떤기능 in pwd date quit
do
case $어떤기능 in
pwd) ............;;
date) ............;;
quit) ............;;
*) echo "invalid input"
esac
done
<쉘 스크립트 기본문법>
반복문
#for, string문자열 3개 출력
for string in "this" "is" "shell"; do;
echo ${string};
done
#while, i가 3보다 작으면 계속 실행
i=0
while [ ${i} -le 3 ]; do;
echo ${i}
i=$(( ${i}+1 ))
done
#until, j가 3보다 작거나 같을 때까지 계속 실행
j=10
until [ ${j} -le 3 ]; do
echo ${j}
j=$(( ${j}-1 ))
done
조건문
# if로 시작 fi로 맺음
# 2개 이상의 변수 조건을 비교하는 경우[[]], 1개 비교는 []
# 다중 조건문 if elif else 순서고 else전 각 단계에 ; then 추가
str1="shell"
str2="bash" ...
if [[ ${str1}==${str2} || ${str2}==${str3} ]] || [ ${str4}==${str5} ]; then
elif [ ~~~ ]; then
echo "~~"
else
echo "~~"
fi
선택문
# | 기호로 다중값입력
# case조건문시 조건문장끝에 반드시 ; 로 끝내야
for string in "this" "is" "shell" "script" "by" "b-" "a-" "sh"; do
case ${} in
this|THIS)
echo "${string} : 해당케이스의 여러가지 오타를 | 로 잡아줌~~~"
;;
is|iss)
echo "${string} : 해당케이스의 여러가지 오타를 | 로 잡아줌~~~"
;;
b-|b)
echo "${string} : 해당케이스의 여러가지 오타를 | 로 잡아줌~~~"
;;
sh|shh)
echo "${string} : 해당케이스의 여러가지 오타를 | 로 잡아줌~~~"
;;
*|)
echo "${string} : *기타모든케이스~~~"
;;
esac
done
디버깅 : echo, exit, tee 활용해서 화면출력으로 확인 + 스크립트 실행시 아래 디버깅 옵션 활용
| --- | --- | --- |