내가 한 노력들

[ Linux ] shell script기초(1) 본문

IT 공부/Linux

[ Linux ] shell script기초(1)

JONGI-N CHOI 2021. 6. 1. 16:31

 

shell script

shell공간에 한줄한줄 절차적으로 동작하는 프로그램을 짜는 것

 

Vim 환경설정

shell script를 이용하기 전에 vim 환경설정을 만들어줄 필요성이 있다.

협업을 할 때, 각자가 적은 소스코드의 환경설정이 틀리면 다른 사람이 받아봤을 때 깨질 수 있기 때문이다.

 

 

~/.vimrc

set smartindent set tabstop=4 set expandtab set shiftwidth=4

 

~는 자신의 home 디렉토리 위치를 의미

위의 코드는 스페이스 4개 만큼 자동적으로 tab이 되도록 해주는 설정이다.

 

shell에는 최상위의 shell은 sh, 리눅스의 최상위면서 sh보다는 한단계 낮은 bash가 있다.

 

기본적인 문법

$ vi s1.sh

 

#!/bin/bash
echo "My name is Jongin" 
printf "My name is %s\n" Jongin 
str="Hello "
echo "${str}Wrold"

 

 

#!/bin/bash : bash쉘로 작성하겠다.

echo : 출력

printf : 포멧 출력

${ } : 변수임을 알려주는 기호 ( 없어도 되지만, 다른 문자열과 구별하기 위해서 사용한다.)

 

결과

$ bash s1.sh

 

bash 쉘로 작성했기 때문에 bash (파일명)을 통해서 해당 파일을 실행할 수 있다.

 

vi 에디터 안에서 실행하는 법

 

shell 화면으로 나가지 않고, vi에디터에서 ":!" 명령어를 이용하면 해당 명령어의 실행값을 shell창에서 확인할 수 있고, enter를 입력하면 다시 vi 창으로 돌아올 수 있다.

 

주의할점

 

쉘 스크립트에서는 공백 사용에 주의해야한다!

변수와 "=" 사이에 스페이스를 입력하면 안되고, 변수를 초기화 할 때에도 공백을 넣으면 공백으로 인식되기 때문에 제대로 된 값이 안나오게 되기 때문이다.

 

 

Loop

$ for i in {1..5}; do echo $i; done

 

프로그래밍을 해본사람은 문법은 달라도 위의 명령어를 보면 어떤 코드인지 이해할 수 있을 것이다.

for문을 이용해서 loop를 실행

{1..5} 는 {1,2,3,4,5} 행렬이랑 같은 구조이다.

{1,2,3,4,5} 의 행렬에서 loop를 돌때마다 index순서대로 하나씩 꺼내와서 i 에 넣어주는 것

그렇게 loop정의가 끝나면 ";"으로 구분해서 do부분에 loop가 돌 때마다 실제로 실행할 코드부분을 입력한다. loop가 돌 때마다. echo (출력)을 통해서 변수 i($i)를 출력한다는 의미

그리고 done으로 loop문의 종료를 알린다.

 

Loop 심화

 

현재 디렉토리에 있는 파일중에서 .txt의 확장자를 가지고 있는 파일의 이름과 내용을 출력하는 쉘 스크립트

 

ls 명령어는 파일 목록을 보여준다

 

ls *.txt 정규화를 이용하면 *는 모든 것을 의미하기 때문에 *.txt는 확장자가 txt인 모든 이름의 파일을 의미

 

위의 개념을 이용하면

#!/bin/bash
for i in `ls *.txt` 
  do 
    echo "--------------------------"
    echo $i
    cat $i 
    echo "==========================" 
  done

 

` ` : `` 안에 있는 명령어를 실행해라

ls *.txt의 결과물 ( a.txt, b.txt, ps.txt)를 loop를 통해서 하나하나 i에 넣고 그 값을 이용해서

파일의 이름과 내용을 출력하는 코드다.

 

 

 

별칭 활용하기

 

 

파일에 실행권한 ('x')가 있을 때, "./s1.sh"로 바로 실행을 할 수 있다.

이렇게 전부 입력하는 시간을 단축하기 위해서 별칭으로 만들고 사용하는 방법이다

 

$ alias s1='~/s1.sh'

 

s1만 입력하더라도 s1.sh파일이 실행되도록 해주는 것이다.

이러한 명령은 linux를 종료하게 되면, 초기화 되기 때문에 계속 사용하고 싶다면??

.bashrc 파일이나 .profile파일에 명령어를 추가하면, 로그인했을 때 자동으로 실행되기 때문에 항상 사용할 수 있게 된다.

 

.bashrc

 

파일 맨아래에 추가!

 

 

s1만 입력해도 실행되는 것을 볼 수 있다.

 

 

 

참고문헌

https://www.youtube.com/watch?v=035pZp2R50M&list=PLEOnZ6GeucBVj0V5JFQx_6XBbZrrynzMh&index=11&ab_channel=%EC%8B%9C%EB%8B%88%EC%96%B4%EC%BD%94%EB%94%A9indiflex