웹사이트 검색

Linux에서 간단한 쉘 스크립트를 만드는 방법


쉘 스크립트 작성은 Linux 사용자가 손끝에서 갖추어야 할 가장 필수적인 기술 중 하나입니다. 쉘 스크립트는 한 줄씩 실행하는 데 지루한 반복 작업을 자동화하는 데 엄청난 역할을 합니다.

이 튜토리얼에서는 모든 Linux 사용자가 수행해야 하는 기본 쉘 스크립팅 작업 중 일부를 강조합니다.

1. 간단한 쉘 스크립트 생성

쉘 스크립트는 ASCII 텍스트로 구성된 파일입니다. 먼저 간단한 쉘 스크립트를 작성하고 이를 위해 텍스트 편집기를 사용하겠습니다. 명령줄과 GUI 기반의 텍스트 편집기가 상당히 많이 있습니다. 이 가이드에서는 vim 편집기를 사용합니다.

실행 시 “Hello world”를 표시하는 간단한 스크립트를 만드는 것부터 시작하겠습니다.

vim hello.sh

파일에 다음 내용을 붙여넣고 저장합니다.

#!/bin/bash
Print Hello world message
echo "Hello World!"

쉘 스크립트를 한 줄씩 살펴보겠습니다.

  • 첫 번째 줄 – #!/bin/bash –은 shebang 헤더로 알려져 있습니다. 이는 스크립트를 해석하는 데 어떤 프로그램이 사용될 것인지를 나타내는 특수 구성입니다. 이 경우 /bin/bash로 표시된 bash 셸이 됩니다. #!/usr/bin/python3로 표시되는 Python 및 Shebang 헤더가 다음으로 표시되는 Perl과 같은 다른 스크립트 언어가 있습니다. #!/usr/bin/perl.
  • 두 번째 줄은 주석입니다. 주석은 쉘 스크립트가 수행하는 작업을 설명하고 스크립트가 실행될 때 실행되지 않는 명령문입니다. 주석 앞에는 항상 해시 기호 #가 옵니다.
  • 마지막 줄은 터미널에 'Hello World' 메시지를 인쇄하는 명령입니다.

다음 단계는 표시된 대로 chmod 명령을 사용하여 실행 권한을 할당하여 스크립트를 실행 가능하게 만드는 것입니다.

chmod +x  hello.sh

마지막으로 다음 명령 중 하나를 사용하여 셸 스크립트를 실행합니다.

bash hello.sh
OR
./hello.sh

2. 조건문을 사용하여 코드 실행

다른 프로그래밍 언어와 마찬가지로 조건문은 bash 스크립트에서 결정을 내리는 데 사용되며 구문은 약간만 다릅니다. 우리는 if, if-elseelif 조건문을 다룰 것입니다.

if 문의 예

if 문은 단일 또는 다중 조건을 테스트하는 데 사용할 수 있습니다. 단일 조건을 테스트하기 위해 if 문의 기본적인 사용부터 시작하겠습니다. if 문은 if ... fi 블록으로 정의됩니다.

if command
then
  statement
fi

아래 쉘 스크립트를 살펴보겠습니다.

#!/bin/bash
echo 'Enter the score'
read x

if [[ $x == 70 ]]; then
  echo 'Good job!'
fi

위의 쉘 스크립트는 사용자에게 변수 x에 저장되는 점수를 제공하라는 메시지를 표시합니다. 점수가 70에 해당하는 경우 스크립트는 "Good job!" 출력을 반환합니다. 비교 연산자 ==는 변수 x에 저장된 입력 점수가 100과 동일한지 테스트하는 데 사용됩니다.

사용할 수 있는 다른 비교 연산자는 다음과 같습니다.

  • -eq – 같음
  • -ne – 같지 않음
  • -lt – 미만
  • -le – 작거나 같음
  • -lt – 미만
  • -ge – 이상

예를 들어, 아래의 if-statement 블록은 입력 점수가 50보다 작은 값인 경우 'Work Harder'를 인쇄합니다.

if [[ $x -lt 50 ]]; then
  echo 'Work Harder!'
fi

if-else 문의 예

2가지 가능한 결과가 있는 상황에서는 이것이든 저것이든 if-else 문이 유용합니다.

if command
then
  statement1
else
  statement2
fi

아래 스크립트는 입력 점수를 읽고 70보다 크거나 같은지 확인합니다.

점수가 70 이상인 경우 '훌륭합니다. 합격하셨습니다!' 메시지가 표시됩니다. 그러나 점수가 70 미만으로 떨어지면 '실패했습니다'라는 출력이 인쇄됩니다.

#!/bin/bash

echo 'Enter the score'

read x

if [[ $x -ge 70 ]]; then
  echo 'Great job, You passed!'
else
  echo  'You failed'
fi

if-elif-else 문의 예

여러 조건과 다른 결과가 있는 시나리오에서는 if-elif-else 문이 사용됩니다. 이 문은 다음 형식을 사용합니다.

if condition1
then
  statement1
elif condition2
then
  statement2
else
  statement3
fi

예를 들어, 입력한 숫자가 90, 60 또는 30인지 확인하는 복권 스크립트가 있습니다.

#!/bin/bash

echo 'Enter the score'

read x

if [[ $x -eq 90 ]];
then
  echo “You have won the First Prize”

elif [[ $x -eq 60 ]];
then
  echo “You have won the Second Prize”

elif [[ $x -eq 30 ]];
then 
  echo “You have won the Second Prize”
else
  echo “Please try again”
fi

3. AND 논리와 함께 If 문 사용

두 조건이 충족되면 작업을 실행하기 위해 AND 논리 연산자와 함께 if 문을 사용할 수 있습니다. && 연산자는 AND 논리를 나타내는 데 사용됩니다.

#!/bin/bash

echo 'Please Enter your user_id'
read user_id

echo 'Please Enter your tag_no'
read tag_id

if [[ ($user_id == “tecmint” && $tag_id -eq 3990) ]];
then
  echo “Login successful”
else
  echo “Login failure”
fi

5. OR 논리와 함께 If 문 사용

OR 논리(|| 기호로 표시)를 사용하는 경우 예상 결과를 제공하려면 스크립트에서 조건 중 하나를 충족해야 합니다.

#!/bin/bash

echo 'Please enter a random number'
read number

if [[ (number -eq 55 || number -eq 80) ]];
then
 echo 'Congratulations! You’ve won'
else
 echo 'Sorry, try again'
fi

반복 구문 사용

Bash 루프를 사용하면 사용자는 특정 결과를 얻을 때까지 일련의 작업을 수행할 수 있습니다. 이는 반복적인 작업을 수행하는 데 유용합니다. 이 섹션에서는 다른 프로그래밍 언어에서도 볼 수 있는 일부 루프를 살펴보겠습니다.

while 루프

이것은 작업하기 가장 쉬운 루프 중 하나입니다. 구문은 매우 간단합니다.

while  <some test>
do
 commands
done

아래 while 루프는 실행될 때 1부터 10까지의 모든 숫자를 나열합니다.

#!/bin/bash
A simple while loop
counter=1
while [ $counter -le 10 ]
 do
echo $counter
 ((counter++))
done

while 루프에 대해 논의해 봅시다:

counter 변수는 1로 초기화됩니다. 변수가 10보다 작거나 같은 동안 조건이 충족될 때까지 카운터 값이 증가합니다. echo $counter 줄은 1부터 10까지의 모든 숫자를 인쇄합니다.

For 루프

while 루프와 마찬가지로 for 루프는 코드를 반복적으로 실행하는 데 사용됩니다. 즉. 사용자가 정의한 만큼 코드 실행을 반복합니다.

구문은 다음과 같습니다.

for var in 1 2 3 4 5 N
do
 command1
 command2
done

아래의 for 루프는 1부터 10까지 반복하고 해당 값을 화면에서 처리합니다.

이를 달성하는 더 좋은 방법은 모든 숫자를 입력하는 대신 표시된 대로 이중 중괄호 { }를 사용하여 범위를 정의하는 것입니다.

#!/bin/bash
Specify range in a for loop

for num in {1..10}
do
  echo $num
done

Bash 위치 매개변수

위치 매개변수는 값이 셸에서 전달될 때 스크립트에서 참조되지만 할당될 수 없는 특수 변수입니다. 위치 매개변수는 $0 $1 $2 $3 …부터 $9까지 실행됩니다. $9 값을 넘어서는 매개변수는 중괄호로 묶어야 합니다(예: $ {10}, $ {11} … 등).

스크립트를 실행할 때 $0인 첫 번째 위치 매개변수는 쉘 스크립트의 이름을 사용합니다. $1 매개변수는 터미널에 전달된 첫 번째 변수를 취하고, $2는 두 번째 변수를 취하고, $3은 세 번째 변수를 취합니다.

그림과 같이 test.sh 스크립트를 생성해 보겠습니다.

#!/bin/bash
echo "The name of the script is: " $0
echo "My first name is: " $1
echo "My second name is: " $2

다음으로 스크립트를 실행하고 첫 번째 이름과 두 번째 이름을 인수로 제공합니다.

bash test.sh James Kiarie

출력에서 인쇄된 첫 번째 변수가 셸 스크립트의 이름(이 경우 test.sh)임을 알 수 있습니다. 그런 다음 쉘 스크립트에 정의된 위치 매개변수에 해당하는 이름이 인쇄됩니다.

위치 매개변수는 변수에 값을 명시적으로 할당하는 대신 입력되는 데이터를 사용자 정의하는 데 도움이 된다는 점에서 유용합니다.

쉘 명령 종료 코드

먼저 종료 코드란 무엇입니까?라는 간단한 질문에 대답해 보겠습니다.

사용자 또는 쉘 스크립트가 쉘에서 실행하는 모든 명령에는 종료 상태가 있습니다. 종료 상태는 정수입니다.

종료 상태 0은 명령이 오류 없이 성공적으로 실행되었음을 의미합니다. 1에서 255 사이의 숫자는 명령이 실패했거나 성공적으로 실행되지 않았음을 나타냅니다.

명령의 종료 상태를 찾으려면 $? 셸 변수를 사용하세요.

종료 상태 1은 일반 오류나 sudo 권한 없이 파일을 편집하는 등 허용되지 않는 오류를 나타냅니다.

종료 상태 2는 명령 또는 내장 쉘 변수의 잘못된 사용을 나타냅니다.

127 종료 상태는 일반적으로 '명령을 찾을 수 없음' 오류를 발생시키는 잘못된 명령을 나타냅니다.

스크립트 내에서 쉘 명령의 출력 처리

Bash 스크립팅에서는 나중에 사용할 수 있도록 명령 출력을 변수에 저장할 수 있습니다. 이는 쉘 명령 대체라고도 하며 다음과 같은 방법으로 수행할 수 있습니다.

variable=$(command)
OR
variable=$(/path/to/command)
OR
variable=$(command argument 1 argument 2 ...)

예를 들어, today라는 변수에 date 명령을 저장하고 쉘 스크립트를 호출하여 현재 날짜를 표시할 수 있습니다.

#!/bin/bash

today=$(date)

echo “Today is $today”

또 다른 예를 들어보겠습니다. Linux 시스템에서 유효한 로그인 사용자를 찾고 싶다고 가정해 보겠습니다. 어떻게 하시겠습니까? 먼저 모든 사용자(시스템, 프로세스 및 로그인 사용자 모두) 목록이 /etc/passwd 파일에 저장됩니다.

파일을 보려면 cat 명령을 사용해야 합니다. 그러나 로그인 사용자로 범위를 좁히려면 grep 명령을 사용하여 /bin/bash 속성이 있는 사용자를 검색하고 다음과 같이 cut -c 1-10 명령을 사용합니다. 이름의 처음 10자를 표시하도록 표시됩니다.

cat 명령login_users 변수에 저장했습니다.

#!/bin/bash
login_users=$(cat /etc/passwd | grep /bin/bash | cut -c 1-10)
echo 'This is the list of login users:
echo $login_users

이로써 간단한 쉘 스크립트 작성에 대한 튜토리얼이 끝났습니다. 이 정보가 귀하에게 가치가 있기를 바랍니다.