728x90
반응형

DevOps/Shell 18

zsh vs bash

기본적으로 Unix 계열에선 bash Mac 계열에서는 zsh을 사용한다. 그렇기 때문에 기존에 터미널에서 작동하는 명령어가 그대로 실행되기를 기대하는 것은 어렵다. 그래서 차이를 알아보려고 한다. 차이를 알아보자 탄생 중요하지 않지만 참고는 하자. 더군다나 zsh은 학생이 만듦 bash Later in 1989, Brian Fox created the Bash shell for the GNU Project as a viable software alternative for the Bourne shell. Bash introduced significant improvements over its predecessor. Most prominent of these improvements was its capac..

DevOps/Shell 2023.03.01

Null Check

이건 말 뜻 그대로 null 체크이다. 값이 비었는지 체크하는 것이다. 이것이 왜 필요하냐..? 예외 상황이 발생해서 그렇다. 간단하게 null check는 'z'로 가능하다. #!/bin/bash # Define a variable variable="Hello, world!" # Check if the variable is null if [ -z "$variable" ] then # Print a message if the variable is null echo "variable is null" else # Print a message if the variable is not null echo "variable is not null" fi 만약 string의 null을 체크할 때는 'n'도 된다. if..

DevOps/Shell 2023.01.01

exit

exit는 우리가 프로그래밍 할 때의 main 함수의 return과 비슷하다고 생각하면 된다. 실제로 Shell script의 끝을 지정하는 것이다. 다시 말해서 우리는 스크립트(프로세스)의 종료를 exit로 결정할 수 있다고 봐도 된다. exit code의 범위는 0~255로 솔직히 맘대로 정할 수 있다. 일반적으로는 exit code가 0이라면 정상 종료 그 외에는 비정상이라고 할 수 있다. 특히 예시를 들어주자면 0: Success. The command or program completed successfully. 1: General error. The command or program encountered an unspecified error. 2: Misuse of shell builtins...

DevOps/Shell 2023.01.01

let [command]

let은 쉘 스크립팅을 할 때 많이 쓴다. 예시부터 보자 #!/bin/bash # Declare variables a=10 b=20 # Use the let command to perform arithmetic operations let result=a+b echo "$a + $b = $result" let result=a-b echo "$a - $b = $result" let result=a*b echo "$a * $b = $result" let result=a/b echo "$a / $b = $result" let result=a%b echo "$a % $b = $result" ??? let 없어도 result에 저장되는 것 아니야?? 맞다. 그렇긴 하다. 하지만 그것은 연산이 아니라 문자열이 저장된..

DevOps/Shell 2023.01.01

environment variable

정의 환경 변수란 쉘 전체에 적용되는 변수를 뜻한다. 다시 말해서 어떤 프로세스에서도 해당 변수를 사용할 수 있다. 우리가 시스템 변수, 환경 변수를 설정하는 것도 같은 원리다. 목적 대부분 환경 변수가 필요한 이유는 프로그램이 어디에 있는지 정확하게 모르기 때문이다. 다시 말해서 우리가 install 한 프로그램의 위치를 지정해주지 않으면 프로세스가 자동으로 찾기는 어렵다는 말과 같다. 그래서 맨날 $JAVA_HOME, $PATH 등 맨날 시스템 변수 설정해주는 것이다. 하지만 이외에도 어떤 프로세스에서도 사용할 수 있는 변수를 설정하는데 목적이 있다. Shell Script에서의 envs 다시 본론으로 들어와서 Shell Script에서는 환경 변수로 선언한 변수들을 선언 없이도 쓸 수 있다. 다른 ..

DevOps/Shell 2022.12.31

Bash, 쉘 스크립트 시작하기

Shell은 간단하게 말하자면 Kernel을 조작하기 위한 수단이라고 보면 된다. 진짜 뜻 그대로 껍데기다. 그 중에서도 우리가 많이 알고 있는 Bash 는 무엇일까? Bash는 Bourn Again SHell 이란 뜻이다. 즉, Bash Shell이란 말은 사실 중복되는 말이다. 하지만 뭐 다 알아들으니까.. 상관없다. Bash에 대해서 알아보자 다시 말하면 Shell Scripting에 대해서 알아보자 기초 [DevOps/Shell] - Shell Script - 1, 작성하기 변수 [DevOps/Shell] - Shell Script - 2, Variable(1) [DevOps/Shell] - Shell Script - 8, Variable(2) [DevOps/Shell] - environment ..

DevOps/Shell 2022.12.25

Shell Script - 10, Function

스크립트에서 사용자 정의 함수를 만들 수 없다면 스크립트라고 할 수도 없다. 스크립트의 꽃 함수를 알아보자 일반적으로 함수는 2가지 형태로 쓰인다. 1).h 헤더파일(라이브러리)과 같이 다른 파일에 선언, 정의되고 include 만 해서 쓰이는 경우(linking 작업이 일어남) 2)같은 파일에 선언,정의가 되어 자체적으로 바로 쓰는 경우 둘 다 상관없다. 하지만 library를 쓰는 경우는 예외가 있다. 아래 command가 예외다. 항상 스크립트 시작에 써놓아야 한다. . ./library.sh 헷갈리는 것들이 몇가지 있는데 일반적으로는 function과 procedure는 다르다고 생각한다. function은 값을 반환하고 procedure는 출력한다. 쉘 에서는 둘 중 하나만, 둘 다, 아무것도 ..

DevOps/Shell 2022.11.25

Shell Script - 9, External Program

외부 프로그램이라는 뜻인데 쉘에서 외부 프로그램을 실행할 때도 있다는 말이다. 키보드 숫자 1 왼쪽에 있는 기호 `를 아는가? backtick이라고 부른다. external command와 연관이 있는 문자다. 그렇기 때문에 `에 대해서 먼저 알고가자 `은 우선 text를 command로 사용하겠다라는 선언을 하는 것이다. 예시를 보면 더 쉽다. $ grep "^${USER}:" /etc/passwd | cut -d: -f5 Steve Parker 우선 /etc/passwd 에서 이름을 가져온다. 그렇게 되면 출력이 되는 것을 알 수 있는데 이 출력을 변수에 넣고 싶다면 어떻게 할까?? 다시 말하자면 command의 결과를 변수에 넣고 싶은데 어떻게 할까?? 그럴 땐 command를 `로 래핑하면 된다...

DevOps/Shell 2022.11.25

Shell Script - 8, Variable(2)

**여기선 예약된 변수에 대해 알아볼 것이다. 우리는 variable 중에서 ${x} $ 뒤에 오는 기호에 대해서 먼저 알아볼 것이다. $0은 프로그램의 basename이라고 부른다. $1…$9는 9개의 파라미터다. $@은 모든 parameter를 지칭한다. $*은 @와 비슷하지만 whitespace, quoting을 전혀 보존하지 않는다. 다시 말해서 "File with spaces" 라면 "File" "with" "spaces" 3개로 된다. $#은 파라미터의 숫자를 말한다.(parameter가 몇개인지) 솔직히 말로만 하면 잘 이해가 안된다. 예시를 보자 var3.sh #!/bin/sh echo "I was called with $# parameters" echo "My name is $0" ech..

DevOps/Shell 2022.11.24

Shell Script - 7, Case

이제 case를 알아보자 case는 우리가 이미 알던대로 if, elif, else 문으로 벅찬 분기문을 도와주는 구문이다. talk.sh #!/bin/sh echo "Please talk to me ..." while : do read INPUT_STRING case $INPUT_STRING in hello) echo "Hello yourself!" ;; bye) echo "See you again!" break ;; *) echo "Sorry, I don't understand" ;; esac done echo echo "That's all folks!" 이런 식으로 작동한다. $ ./talk.sh Please talk to me ... hello Hello yourself! What do you t..

DevOps/Shell 2022.11.24
728x90
반응형