Shellscripting


변수 및 Shebang


셸 프로그래밍 소개


Shell은 각 Unix 및 Linux 시스템의 표준 인터페이스입니다.사용자와 관리자는 셸을 사용한 경험이 있으며, 명령을 스크립트에 통합하는 것은 자연스러운 과정이다.그러나 이것은 빙산의 일각일 뿐이다.
최근에 나는 셸을 배우고 스크립트를 작성하는 데 시간을 썼다. 셸은 실제적으로 완전한 프로그래밍 언어로 변수와 함수, 그리고 더 높은 구조, 예를 들어 수조(연관수조 포함)를 포함하고 내부 핵과 직접 연결되며 문법에 본 컴퓨터의 IO 원어와 프로세스와 작업 제어를 내장하고 있음을 깨달았다.
나는 이미 일련의 게시물을 계획했다. 나는 가능한 한 간단명료하게 요약할 것이다.
그럼, 셸스크립팅은 무엇입니까?
Shellscripting은 셸이 실행할 수 있도록 일련의 명령을 작성하는 것입니다.이것은 지루하고 반복되는 명령 시퀀스를 간단한 스크립트로 조합하여 언제든지 저장하고 실행할 수 있어 자동화 작업에 매우 유용하다.이것은 최종 사용자가 필요로 하는 작업량을 감소시켰다.
스크립트의 명령은 해석기 (셸) 에서 하나하나 실행되며, 명령줄에 입력한 모든 내용을 스크립트에 넣을 수 있습니다.

Before running scripts, we need to set up permissions for execution with: chmod 755 script.sh

We can then run the script with ./script.sh via command line.


#!

#! (shebang) 스크립트를 실행할 셸 (해석기) 의 바이너리를 지정합니다. 예를 들어 다음과 같습니다.#! /bin/bash, #! /bin/zsh 또는 최고의 이식성 #! /bin/sh을 얻기 위해 시스템 셸을 실행합니다.
이 시리즈의 대부분의 코드는 bashzsh 셸만 사용하여 테스트를 진행하고, 대부분의sh스크립트는 Bash에서 실행할 수 있으며, 수정할 필요가 없지만, 일부 내용은 작업할 수 없습니다.
#! /bin/sh
sleep 90
#!을 포함하는 스크립트를 실행할 때 실제 발생하는 것은 실행 해석기입니다. 스크립트를 호출하는 경로를 매개 변수로 전달합니다.이를 확인하기 위해 sleepy.sh 스크립트가 있다고 가정하면 ./sleepy.sh &을 사용하여 스크립트를 실행할 수 있습니다. 그 중에서 &은 스크립트 실행 프로세스의 PID를 되돌려 주고 ps -fp [PID]을 실행하여 프로세스 정보를 볼 수 있습니다.
UID PID PPID C STIME TTY TIME CMD
505 65418 59985 0 7:09PM ttys000 0:00.01 /bin/zsh ./sleepy.sh
./sleepy.sh이 매개 변수로 나에게 전달된 /bin/zsh 바이너리 파일을 볼 수 있습니다.
스크립트에 #!이 포함되지 않으면 기본 셸을 사용하여 명령을 실행하지만, 셸의 문법이 약간 다르기 때문에 현식으로 실행하는 것이 최선입니다.
그 밖에 우리는 셸만 스크립트의 해석기로 사용할 필요가 없다.python과 같은 다른 바이너리 파일도 사용할 수 있습니다.
#! /usr/bin/python

print "This is a Python script"
chmod 755 hi.py
./hi.py
This is a Python script

변수


변수는 이름이 있는 저장 위치로 이름-값 쌍으로 볼 수 있습니다.
변수를 만드는 데 사용되는 구문은 VARIABLE_NAME="Value"입니다.주의해야 할 것은 변수명은 대소문자를 구분하는 것이고 관례에 따라 변수명은 모두 대문자여야 한다는 것이다.또한 변수를 선언할 때 =번 전후에 공백을 사용하지 않도록 하십시오.
기본적으로 모든 변수는 전역 변수이며 사용하기 전에 정의해야 합니다.
변수는 함수에서 정의할 수 있지만, 함수를 호출하기 전에 접근할 수 없습니다.
function var(){
    FUNC_VAR=1
}
# FUNC_VAR is not defined at this point and this will not return anything
echo $FUNC_VAR
var # This is how we call a function in the shell
# FUNC_VAR is now available because the function has been called
echo $FUNC_VAR # Output: 1
유효한 변수 이름은 문자, 숫자, 밑줄로 구성될 수 있지만 숫자는 이름의 첫 번째 문자가 될 수 없습니다.
# Valid names
DARK_JEDI="Vader"
GR4Y_J3DI="Ahsoka"
Regular_Jedi="Obi-Wan"

# Invalid names
3DARK_LORDS="Vader Sidius Plagueis"
TWO-REBELS="Solo Leia"
ONE@SHIP="Ebon Hawk"
#! /bin/bash
MY_SHELL="zsh"
echo "I like the $MY_SHELL shell" # Output: I like the zsh shell
또한 대괄호 안에 변수 이름을 포함할 수도 있습니다.
MY_SHELL="zsh"
echo "I like the ${MY_SHELL} shell" # Output: I like the zsh shell
대괄호 구문은 변수 앞이나 뒤에 다른 데이터를 추가해야 하는 경우를 제외하고는 선택할 수 있습니다. 예를 들어 다음과 같습니다.
MY_SHELL="bash"
echo "I'm ${MY_SHELL}ing on my keyboard!" # Output: I'm bashing on my keyboard.
만약 괄호가 없다면, 해석기는 이름 변수 뒤에 있는 ing을 변수 이름의 일부로 하기 때문에 작동할 수 없습니다.
또 다른 최선의 방법은 변수를 사용할 때 인용부호에 묶어서 의외의 부작용을 방지하는 것이다.
또한 명령의 출력을 변수에 할당할 수도 있습니다.
SERVER_NAME=$(hostname)
echo "You are running this script on ${SERVER_NAME}"

국부 변수


국부 변수는 local 키워드로 만들어져 함수만 국부 변수가 있기 때문에 함수를 설명하는 함수 내에서만 접근할 수 있습니다.
function myFunc(){
    local LOCAL_VAR=" I'm locally scoped"
}
가장 좋은 것은 함수에서만 국부 변수를 사용하는 것이다.
이제 나는 다음 글에서 테스트와 순환에 관한 내용을 쓸 것이다.읽어 주셔서 감사합니다. 질문이 있으면 얼마든지 물어보세요!

좋은 웹페이지 즐겨찾기