Linux

쉘 스크립트 기본 명령어 정리

쿠카이든 2023. 1. 7. 22:15
728x90
쉘 스크립트 기본 명령어

 

1. 개요

 

리눅스를 부팅하면 X를 사용하지 않는다면 대부분은 bash 쉘을 보게됩니다.

많은 리눅스에서 bash 쉘을 이용하여 쉘스크립트로 간단한 프로그램을 제작하거나 

스크립트를 실행하여 사용하거나 crond에 등록하여 사용합니다.

 

여기서는 bash 쉘을 이용한 쉘스크립트를 만들기 위한 기초에 대해 말씀드릴려고 합니다.

  

 

2. 쉘스크립트 파일생성 및 실행 권한 주기

 

. 파일생성

- 파일 생성을 touch 파일명과 같이 가능 하나 출력 리다이렉트(>)를 사용하면 간단합니다.

[root@localhost]# >파일명

[root@localhost]# >test1

 

. 실행 권한 주기

- chmod 직접 rwx 권한 설정 : chmod 700 500  x가 반드시 들어가야 합니다.

 r=4 w=2 x=1

- chmod +x를 사용 하여 간단하게 할당시킵니다.

[root@localhost]# chmod +x test1

 

 

3.쉘스크립트 파일 내용 작성

 

. 실행 쉘지정 (첫줄)

- “#” 뒤는 주석이지만 “#!”뒤는 이 스크립트를 실행할 쉘에 해당합니다.

   #!/bin/bash

 

 

. 쉘 실행 과정

- 실행 : 현재 실행중인 쉘에서 새로운 독립적인 을 만들어서 실행합니다.

- 종료 : 현재 쉘로 돌아옵니다.

현재 쉘 pwd test1  pwd
[root@localhost]#pwd
/root/bin
[root@localhost]#
[root@localhost]#cat test1
#!/bin/bash
cd /root
pwd
[root@localhost]# ./test1
/root
[root@localhost]#

 

다. 파라미터

- test1 내용

echo "\$0 -  실행되는 스크립트의 이름 :  "$0

echo "\$1 -  첫 번째 파라미터 : "$1

echo "\$2 -  두 번째 파라미터 "$2

echo "\$3 -  세 번째 파라미터 "$3

 

./test1 1.sh 2.sh 3.txt

 

$0 - 실행되는 스크립트의 이름 : “test1”.

$1  첫 번째 파라미터 : “1.sh”

$2  두 번째 파라미터 : “2.sh”

$3  세 번째 파라미터 : “3.txt”

$# - 파라미터 개수

$@ - 파라미터 전체 - “$1 $2 $3...”

$$ : 현재 쉘의 프로세스 ID 

 

쉘 파라미터 변수

$* : 이 파라미터 변수는 1부터 시작하는 위치 파라미터의 확장이며, 큰따옴표로 구분하고, IFS 특수 변수의 첫 번째 문자로 구분되는 각 파라미터의 값으로 하나의 단어를 확장하며, 전체 파라미터값을 가지고 있습니다. 만약 IFS가 널이거나 해제되어 있으면 파라미터는 스페이스로 구분합니다.

 

$@ : 이 파라미터 변수는 1부터 시작하는 위치 파라미터의 확장이며, 큰따옴표로 확장되면 각 파라미터는 하나의 구분 단어로 확장되고, 전체 파라미터값을 가집니다.

$# : 이 파라미터 변수는 십진수의 위치 파라미터 전체 개수를 의미합니다. 

$? : 가장 최근에 실행된 포그라운드 파이프라인의 종료상태를 가지고 있습니다.

$- : 실행하자마자 set 내장명령을 통새 또는 쉘 자체에 의해(예를 들어, -i 플래그)설정된 현재 옵션 플래그로 확장합니다.

$$ : 현재 쉘의 프로세스 ID 가지고 있습니다.

$! : 가장 최근에 백그라운드로 실행된 프로세스의 ID를 가지고 있습니다. 

$0 : 쉘 또는 쉘 스크립드의 이름을 가지고 있습니다.

$_ : 이 변수는 쉘이 시작되면 설정되는데, 아규먼트 목록을 사용하여 실행된 쉘 스크립트의 절대경로를 가지고 있다. 어떤 명령이 이전에 실행되었다면 이전에 실행된 명령에서 사용한 마지막 아규먼트의 절대경로를 가지게 됩니다.

 

위치 파라미터

$0 : 0번 파라미터, 즉 현재 쉘 스크립트의 이름을 가집니다.

$1-$9 : 1 ~ 9번까지의 위치 파라미터의 값을 가집니다.

${10} : 열 번째 위치 파라미터의 값을 의미합니다. 두 자릿수의 파라미터 위치는 중괄효({})로 감싸주면 됩니다.

$# : 위치 파라미터의 개수 값을 가집니다.

$* : 위치 파라미터들의 모든 목록을 가집니다. 

$@ : 큰따옴표("")를 사용한 것을 제외하고 $*와 같습니다.

"$*" : 단일 아규먼트로 확장한다. "$1, $2, $3" 형태로 평가합니다. 

"$@" : 아규먼트를 분리하여 확장한다. "$1", "$2", "$3" 형태로 평가합니다.

 

 

라. 변수지정

 

TodayTime="오늘 11시"

변수를 지정할 때 : "=" 앞뒤로 공백이 들어가선 안됩니다.

 

- 지역변수 지정

  함수를 사용할 수 잇고 함수내 지역변수 지정 가능합니다.

  function [함수명] {

   local [변수명]="변수내용"

 

 ...

   }

 

배열 사용

  bash의 최신버전에는 1차원 배열을 지원합니다.

  중간에 키값이 비어있어도 문제 없습니다. (연속된 배열중 그 사이에 값이 지정되지 않아도 가능합니다.)

    var_array[0]="test1"

    var_array[1]="test2"

    var_array[3]="test3"

 

  배열의 값 사용시에는 {}가 필요합니다.

    echo ${var_array[0]}

    echo ${var_array[1]}

    echo ${var_array[2]}

    echo ${var_array[3]}

 

마. 대체명령

- test1 내용

TodayTime=$(date +%Y-%m-%d-%T)

cp -i $1 /backup/$1.$TodayTime

 

- TodayTime=$(date +%Y-%m-%d-%T) : $(command) 괄호 안의 명령을 수행하고

“$(command)”의 결과를 변수에 부여합니다.

 

바. 변수명

- 예약어는 사용할 수 없습니다.

case, esac, do, for, while, until, done, if, elif, else, fi, function, in, select, then,

until, while, time 

 

- 아래 문자는 사용할 수 없습니다.

!, {, }, |, &, *, ;, (, ), <, >, space, tab

 

- 표준 쉘 변수명은 포함하지 않아야 합니다.

PATH, PS1, PWD, RANDOM, SECONDS  (“man bash” 참고)

 

- 주로 소문자, dashes(-), and underscores(_)로 사용하면 문제없습니다.

 

 

 

 

3. 쉘스크립트 실행

 

. 위치지정

[root@localhost]# /root/test1

 

. 현재 디렉토리에서 실행

[root@localhost]# ./test1

 

 

[root@localhost]# test1

-bash: test1: command not found

 

 위치를 지정해서 실행이 가능하나 현재 디렉토리에서 실행하기 위해서는 반드시 ./ 필요합니다.

      

파일명만으로는 실행이 되지 않습니다. 

 

4. 특수 문자

 

메타문자 기능 예제
; 한줄에 여러개의 명령 입력 clear;date
* 임의의 문자 또는 문자들 ls h*
? 임의의 한문자 ls h?
[] 한문자 위치를 위한 문자의 범위 표시 ls [a-z][A-Z] 대소문자
{} 자릿수표현 ls [a-z]{1,3}:소문자 1개 또는 3연속된 소문자
 
>,>>,< 입출력 방향 전환 ls > ls.out
| 명령어 파이프 ls |grep out
~ 홈 디렉토리 cd ~user1
- 이전 작업 디렉토리 cd -
‘’ 모든 쉘 문자 모시 echo ‘$shell’
“” $, `, \ 제외한 모든 쉘문자 무시 echo “$shell”
`` 쉘 명령 수행 echo `date`
\ 특수문자 기능 제거 echo “\$shell”

 

출처 : https://m.blog.naver.com/PostView.naver?isHttpsRedirect=true&blogId=baraem2005&logNo=20168719811 

 

[쉘스크립트] bash 쉘스크립트 입문(기초)

1. 개요 리눅스를 부팅하면 X를 사용하지 않는다면 대부분은 bash 쉘을 보게됩니다. 많은 리눅스에서...

blog.naver.com

 

728x90

'Linux' 카테고리의 다른 글

리눅스에서 파일이름으로 파일 찾기  (0) 2023.01.14
리눅스 wc 명령어(라인수 세기)  (0) 2023.01.08
리눅스 사용자 추가 명령어(adduser)  (0) 2023.01.05
리눅스 대표 디렉토리  (0) 2023.01.01
쉘 스크립트란?  (0) 2022.12.31