관리 메뉴

IT 컴퓨터공학 자료실

초보자를 위한 쉘 스크립트의 기본 명령의 소개 : 쉘 스크립트 기본 문법 입문 (Qiita 펌) 본문

네트워크/리눅스

초보자를 위한 쉘 스크립트의 기본 명령의 소개 : 쉘 스크립트 기본 문법 입문 (Qiita 펌)

윤맨1 2020. 6. 16. 17:53

초보자를위한 쉘 스크립트의 기본 명령의 소개

 

안녕하세요, 초보자를위한 기본 명령을 소개하고있는 쉘 스크립트 입문입니다.
마지막으로 파일 이름을 한번에 바꾸는 간단한 쉘 스크립트를 작성하자.
환경 : Mac OSX El Capitan Terminal; bash / sh shell environment;


쉘 스크립트는

  • 쉘 스크립트는 간단하게 말하면 Unix 명령 등을 함께 실행하면됩니다.
  • 언제 어떤 조건에서 어떤 명령을 실행하거나 파일 내용을로드하거나, 로그 파일을 내보내거나 하는 역할입니다.

기본 설정

test.sh파일을 만듭니다.

test.sh

#! / bin / sh echo "Hello, World!"

  • 쉘 스크립트 파일은 기본적으로 .sh확장자로 만듭니다.
  • 실제 코드를 작성하기 전에 먼저 첫 번째 줄은 #!/bin/sh적고 시스템에 앞으로 쉘 스크립트를 씁니다 같은 고 알려줍니다. ( #는 hash , !은 bang 그래서 #!를 shebang 말합니다.) 그러나 bash의 고유 기능을 사용하는 경우 #!/bin/bash와 써야합니다 (참고 : bash 코딩 , "bashism"에 대한 생각 .)
  • 쉘 스크립트 파일 (test.sh)를 실행하려면 터미널에서 파일이 저장되어있는 위치에서 다음 중 하나의 명령으로 실행할 수 있습니다.

$ chmod 755 test.sh $ ./test.sh

$ sh test.sh

$ bash test.sh

파일을 실행하면 Hello, World!가 표시됩니다.

기본 명령

댓글

#을 쓰고 댓글을 쓸 수 있습니다.

test.sh

#! / bin / sh # 이것은 주석입니다.  # echo "댓글은 실행되지 않습니다!" echo "Hello, World!"

입력 · 출력

echo에서 출력 read에 입력합니다.

test.sh

#! / bin / sh read NAME echo "Hello, $ NAME !"

실행 결과

$ ./test.sh Tensai Hello, Tensai!

입력을 기다릴 때 스크립트가 지속되지 않습니다.
Bash는 -e플래그로 특수 문자를 이스케이프 할 수 있습니다.

#! / bin / bash echo -e "Hello \ n $ NAME !" # 줄 바꿈됩니다.

변수

  • 변수의 이름으로 영숫자와 밑줄을 사용할 수 있습니다. a ~ z, A ~ Z, 0 ~ 9 및 _ 입니다.
  • 변수에 값을 줄 때 =를 전후 공백없이 씁니다. 문자열 인 경우 "로 묶습니다.
  • 변수를 액세스 할 때 변수 이름 앞에 $을 켭니다. 또는 $넣어 변수를 {}이지 묶습니다.
  • 하나의 변수에 하나의 값만 저장할 수 없습니다.
  • 변수의 값을 덮어 쓰지 않도록하려면 readonly를 사용합니다.
  • 변수를 unset이지 삭제할 수 있습니다. ( readonly변수를 제거 할 수 없습니다.)

test.sh

#! / bin / sh var = "이 변수" VaR_2 = "이것도 변수" echo "Var_2 = $ VaR_2 " VaR_2 = "VaR_2가 변경되었습니다." echo $ { VaR_2 } readonly var var = "readonly var를 바꾸어 본다."

실행 결과

$ ./test.sh Var_2 = 이것도 변수 VaR_2이 변경되었습니다. shell.sh : line 11 : var : readonly variable

특별한 변수

쉘 스크립트에서는 다음의 특별한 변수가 있습니다.

변수기능

$\ $ 0 스크립트 이름
$\ $ 1 ~ $ 9 인수 첫 번째 인수를 $1두 번째 인수를 $2이지 액세스
$ # 스크립트에 준 인수의 수
$ * 모든 인수를 정리해 하나로 처리
$ @ 모든 인수를 개별적으로 처리
$? 직전 실행 한 명령의 종료 값 (0은 성공, 1 실패)
$$ 이 쉘 스크립트의 프로세스 ID
$! 마지막에 실행 한 백그라운드 프로세스 ID

test.sh

#! / bin / sh echo " \ $ 0 (스크립트 이름) : $ 0 " echo " \ $ 1 (첫 번째 인수) : $ 1 " echo " \ $ 2 (두 번째 인자) : $ 2 " echo " \ $ # (인수의 수) : $ # " echo " \ "\ $ * \" : \ " $ * \" " echo " \ "\ $ @ \" : \ " $ @ \" " VAR = "exit 값은 0이 될 것입니다 " echo $?

실행 결과

$ ./test.sh first second 3rd $ 0 (스크립트 이름) : test.sh $ 1 (첫 번째 인수) : first $ 2 (두 번째 인자) : second $ 3 (세 번째 인수) : 3rd $ # (인수의 수) : 3 "$ *": "first second third" "$ @": "first second third" 0

특수 문자

* ? [ ' " ` \ $ ; & ( ) | ~ < > # % = スペース タブ 改行 쉘 스크립트의 특수 문자입니다. 문자열로 사용하는 경우 \를 쓰고 나서 사용합니다.

변수 값 바꾸기

문법설명

$ {var} 변수 값을 들어 바꿉니다
$ {var : -word} 변수가 아직 설정되지 않았거나 빈 문자열의 경우 word 를 돌려줍니다. var에 저장하지 않습니다
$ {var : = word} 변수가 아직 설정되지 않았거나 빈 문자열의 경우 word 를 돌려줍니다. var에 저장합니다
$ {var :? word} 변수가 아직 설정되지 않았거나 빈 문자열의 경우 대체에 실패하고 표준 오류에 오류를 표시합니다
$ {var : + word} 변수가 설정되어있는 경우 word 를 돌려줍니다. var에 저장하지 않습니다

test.sh

#! / bin / sh echo "1 - $ { var : - wordSetInEcho1 } " echo "2 - var = $ { var } " echo "3 - $ { var : = wordSetInEcho3 } " echo "4 - var = $ { var } " unset var echo " 5 - $ { var : + wordSetInEcho5 } " echo "6 - var = $ var " var = "newVarValue " echo "7 - $ { var :+ wordSetInEcho7} " echo "8 - var = $ var " echo "9 - $ { var :? StandardErrorMessage } " echo "10 - var = $ { var } "

실행 결과 :

1 - wordSetInEcho1 2 - var = 3 - wordSetInEcho3 4 - var = wordSetInEcho3 5 - 6 - var = 7 - wordSetInEcho7 8 - var = newVarValue 9 - newVarValue 10 - var = newVarValue

배열 (Bash)

test.sh

#! / bin / bash #bash shell에서 배열 작성 ARRAY = ( item1 item2 item3 item4 ) ARRAY [0] = "ITEM1" ARRAY [2] = "ITEM3" echo "ARRAY [0] : $ { ARRAY [0] } " echo "ARRAY [1] : $ { ARRAY [1] } " # 모든 항목에 액세스 할 echo "ARRAY [*] : $ { ARRAY [*] } " echo "ARRAY [@] : $ { ARRAY [@] } "

실행 결과

$ ./test.sh ARRAY [0] : ITEM1 ARRAY [1] : item2 ARRAY [*] : ITEM1 item2 ITEM3 item4 ARRAY [@] : ITEM1 item2 ITEM3 item4

운영자

shell에서는 산술 연산자를 `expr 数字 演算子 数字`이지 계산할 수 있습니다.

연산자의미예

+ 가압 echo `expr 10 + 20` => 30
- 감소 echo `expr 20 - 10` => 10
\ * echo `expr 11 \* 11` => 121
/ 할인 echo `expr 10 / 2` => 5
% 나머지 echo `expr 10 % 4` => 2
= 지정 a=$b b의 값은 a에 저장됩니다
== [ " $ a"== " $ b"] $ a와 $ b가 같으면 TRUE를 반환합니다.
! = 다른 [ " $ a"! = " $ b"] $ a와 $ b가 같지 않으면 TRUE를 반환합니다.

비교의미예

-eq 등호 [ "$a" -eq "$b" ] $ a와 $ b가 같으면 TRUE를 반환합니다.
-ne 다른 [ "$a" -ne "$b" ] $ a와 $ b가 차이 경우 TRUE를 반환합니다.
-gt [ "$a" -gt "$b" ] $ a가 $ b보다 크다면 TRUE를 반환합니다.
-lt 작은 [ "$a" -lt "$b" ] $ a가 $ b보다 작 으면 TRUE를 반환합니다.
-ge 보다 크거나 같은지 [ "$a" -ge "$b" ] $ a가 $ b보다 크거나 같은 경우 TRUE를 반환합니다.
-le 보다 작거나 같거나 [ "$a" -le "$b" ] $ a가 $ b보다 작거나 같으면 TRUE를 반환합니다.
! 아니다 [ ! "$a" -gt "$b" ] $ a가 $ b보다 크지 않은 경우 TRUE를 반환합니다.
-o [ "$a" -gt "$b" -o "$a" -lt "$b" ] $ a가 $ b보다 크거나 작은 가지 경우 TRUE를 반환합니다. (Bash 확장 · POSIX 폐지 예정)
-a 모두 [ "$a" -gt 90 -a "$a" -lt 100 ] $ a가 90보다 크고 100보다 작은 경우 TRUE를 반환합니다. (Bash 확장 · POSIX 폐지 예정)
-z 문자열이 비어 [ -z "$a" ] $ a가 아무것도 지정하지 않은 경우 TRUE를 반환합니다
-n 문자열이 비어 [ -n "$a" ] $ a에 뭔가를 지정하는 경우 TRUE를 반환합니다

 [명령의 인수에 변수를 지정하는 경우 "로 인용해야합니다

위의 통신을 사용하여 if조건을 씁니다.

if 조건

  • if기본 작성은 if [ 条件 ] then コマンド fi입니다.
  • 조건이 참이면 then다음 명령을 실행합니다.
  • 다른 경우 계속하기 elif [ 条件 ]를 확인합니다.
  • 진정한 조건이없는 경우 else다음 명령을 실행하고 종료합니다.
  • else 이없는 경우는 그대로 종료합니다.

test.sh

#! / bin / sh if [ " $ 1 " -gt " $ 2 " ] then echo "1 번째의 인수가 2 번째의 인수보다 큰" elif [ " $ 1 " -eq " $ 2 " ] then echo "첫 번째 인자와 두 번째 인자는 동일 " else echo "1 번째의 인수가 2 번째의 인수보다 작은 " fi

실행 결과

$ ./test.sh 2 7 첫 번째 인수가 두 번째 인수보다 작은 $ ./test.sh 10 5 1 번째의 인수가 2 번째의 인수보다 큰 $ ./test.sh 9 9 1 번째의 인수와 두 번째 인수는 동일합니다

Switch 조건

  • switch기본 작성은 case 変数 in 条件・値) コマンド ;; esac입니다.
  • 조건 · 값이 변수 맞는 경우 그 다음 명령을 실행합니다.

test.sh

#! / bin / sh DRINK = "coffee" case " $ DRINK " in "beer" ) echo "맥주" ;; "juice" ) echo "주스" ;; "coffee" ) echo "프로그래머가 마시면 코드에 변화!" ;; esac

실행 결과

$ ./test.sh 프로그래머가 마시면 코드에 변화!

루프

루프를
- break키워드 종료
- continue키워드에서 현재 루프를 건너 뛸 수 있습니다.
수 있습니다.

while 루프

조건이 맞는 경우 반복합니다.

test.sh

#! / bin / sh a = 0 while [ $ a -lt 5 ] do echo $ a a = ` expr $ a + 1 ` done

실행 결과 :

$ ./test.sh 0 1 2 3 4

until 루프

while역에서 조건이 맞을 때까지 반복합니다.

test.sh

#! / bin / sh a = 0 until [ ! $ a -lt 5 ] do echo $ a a = ` expr $ a + 1 ` done

실행 결과 :

$ ./test.sh 0 1 2 3 4

for 루프

  • for기본 작성은 for 変数 in 複数値・変数・範囲 do コマンド done입니다.
  • 조건 · 값이 변수 맞는 경우 그 다음 명령을 실행합니다.

test.sh

#! / bin / sh for var in 0 1 2 3 4 # 범위 작성 (Bash 자체) => {0..4} do echo $ var done

실행 결과 :

$ ./test.sh 0 1 2 3 4

함수

쉘 스크립트에서는 함수를 작성 인용 할 수 있습니다.

test.sh

#! / bin / sh # 함수를 지정합니다 MyFunction () { echo "함수 echo입니다." } MyParamFunc () { echo "인수 1 : $ 1 인수 2 : $ 2 " } # 함수를 호출합니다 MyFunction MyParamFunc param1 param2

실행 결과 :

$ ./test.sh 함수의 echo입니다. 인수 1 : param1 인수 2 : param2

이상은 쉘 스크립트의 기본 명령이지만, 그것을 unix 명령과 함께 사용하면 효율적입니다. unix 명령도 많이 있습니다 만, 다음 예제는 파일 이동 명령 mv과 expr만 사용하고 있습니다.

rename.sh

 

#! / bin / sh #이 스크립트가있는 디렉토리의 #txt 파일을 전부 mytxt {number} .txt로 # 변경하는 스크립트입니다 index = 1 for file in * .txt do mv " $ file " "mytxt $ { index } .txt" index = ` expr $ index + 1 ` done

실행 결과 :
ls는 현재 디렉토리에있는 파일을 나열합니다.

$ ls aaa.txt bbb.txt ccc.txt ddd.txt eee.txt test.sh $ ./test.sh $ ls mytxt1.txt mytxt2.txt mytxt3.txt mytxt4.txt mytxt5.txt test.sh

 

이상입니다.

 

 


 

출처 : https://qiita.com/zayarwinttun/items/0dae4cb66d8f4bd2a337