Bash 튜토리얼
Bash 시작하기
수색…
버전
번역 | 출시일 |
---|---|
0.99 | 1989-06-08 |
1.01 | 1989-06-23 |
2.0 | 1996-12-31 |
2.02 | 1998-04-20 |
2.03 | 1999-02-19 |
2.04 | 2001-03-21 |
2.05b | 2002-07-17 |
3.0 | 2004-08-03 |
3.1 | 2005-12-08 |
3.2 | 2006-10-11 |
4.0 | 2009-02-20 |
4.1 | 2009-12-31 |
4.2 | 2011-02-13 |
4.3 | 2014-02-26 |
4.4 | 2016-09-15 |
변수를 사용하는 Hello World
다음 내용으로 hello.sh
라는 새 파일을 만들고 chmod +x hello.sh
실행 권한을 부여하십시오.
다음을 통해 실행 / 실행 :
./hello.sh
#!/usr/bin/env bash
# Note that spaces cannot be used around the `=` assignment operator
whom_variable="World"
# Use printf to safely output the data
printf "Hello, %s\n" "$whom_variable"
#> Hello, World
이것은 실행될 때 Hello, World
를 표준 출력에 인쇄합니다.
스크립트가 어디에 필요한지 bash에게 알려주려면 포함 디렉토리 (일반적으로 작업 디렉토리 인 경우 ./
)로 지정하십시오 .
현재 디렉토리에 대한 별명입니다. 디렉토리를 지정하지 않으면 bash
는 $PATH
환경 변수에 들어있는 디렉토리 중 하나에서 스크립트 위치를 찾습니다.
다음 코드에서는 첫 번째 명령 줄 인수 인 $1
인수를 사용하고 Hello,
뒤에 오는 형식이 지정된 문자열로 출력합니다.
다음을 통해 실행 / 실행 :
./hello.sh World
#!/usr/bin/env bash
printf "Hello, %s\n" "$1"
#> Hello, World
$1
은 작은 따옴표가 아닌 큰 따옴표로 인용되어야한다는 점에 유의해야합니다. "$1"
은 리터럴 문자열 $1
평가되지만 '$1'
은 원하는대로 첫 번째 명령 줄 인수로 확장됩니다.
보안 참고 사항 :
가변 텍스트를 큰 따옴표로 묶어야하는 중요성을 이해하기 위해 bash 쉘에서 변수를 인용하는 것을 잊어 버린 보안 관련 사항을 읽어보십시오.
안녕하세요 세계
대화 형 셸
배쉬 쉘은 일반적으로 대화 형으로 사용된다 : 그것은 당신이 입력 할 수 있습니다하고 Return 키를 누르면 편집 명령은 다음을 실행합니다. 많은 유닉스 기반 운영체제와 유닉스 계열 운영체제는 Bash를 기본 셸 (특히 Linux와 macOS)로 사용합니다. 터미널은 시작시 자동으로 Bash 쉘 대화식 프로세스로 들어갑니다.
다음을 입력하여 Hello World
를 출력하십시오.
echo "Hello World"
#> Hello World # Output Example
노트
터미널에 셸 이름을 입력하기 만하면 셸을 변경할 수 있습니다. 예 :
sh
,bash
등echo
는 Bash 내장 명령으로받은 인수를 표준 출력에 씁니다. 기본적으로 출력에 개행을 추가합니다.
비대륙 형 쉘
Bash 쉘은 스크립트에서 비 대화식 으로 실행될 수 있으므로 쉘은 사람과의 상호 작용이 필요 없습니다. 대화식 동작과 스크립트 된 동작은 동일해야합니다. Unix V7 Bourne 셸 및 일시적 Bash에 대한 중요한 디자인 고려 사항입니다. 따라서 명령 줄에서 수행 할 수있는 모든 작업을 스크립트 파일에 넣어 재사용 할 수 있습니다.
다음 단계에 따라 Hello World
스크립트를 작성하십시오.
hello-world.sh
라는 새 파일을 만듭니다.touch hello-world.sh
chmod
+x hello-world.sh
실행하여 스크립트를 실행 가능하게 만듭니다.이 코드 추가 :
#!/bin/bash echo "Hello World"
행 1 : 스크립트의 첫 번째 줄은 문자 시퀀스로 시작해야합니다
#!
, shebang 1 이라고도합니다. shebang은 운영 체제에/bin/bash
Bash 쉘)를 실행하여 스크립트의 경로를 인수로 전달하도록 지시합니다.예 :
/bin/bash hello-world.sh
2 행 :
echo
명령을 사용하여Hello World
를 표준 출력에 작성합니다.
다음 중 하나를 사용하여 명령 행에서
hello-world.sh
스크립트를 실행하십시오.-
./hello-world.sh
- 가장 일반적으로 사용되며 권장됩니다. -
/bin/bash hello-world.sh
-
bash hello-world.sh
-$PATH
에/bin
이 있다고 가정하십시오. -
sh hello-world.sh
-
실제 생산 사용을 위해, 당신은 생략 할 것이다 .sh
(이것은 배쉬 스크립트가 아니라이기 때문에, 어쨌든 오해의 소지 확장을 sh
스크립트) 아마도 당신의 내 디렉토리에 파일을 이동 PATH
가 당신에게 사용할 수 있도록 관계없이 cat
또는 ls
와 같은 시스템 명령과 같은 현재 작업 디렉토리.
일반적인 실수는 다음과 같습니다.
./hello-world.sh: Permission denied
의 출력 결과로chmod +x hello-world.sh
와 같은 파일에 대한 실행 권한을 적용하는 것을 잊어chmod +x hello-world.sh
./hello-world.sh: Permission denied
.Windows에서 스크립트를 편집하면 Bash가 처리 할 수없는 잘못된 줄 끝 문자가 생성됩니다.
일반적인 증상은
: command not found
. 캐리지 리턴이 커서를 줄의 시작 부분으로 옮겨서 오류 메시지의 콜론 앞에있는 텍스트를 덮어 씁니다.스크립트는
dos2unix
프로그램을 사용하여 수정할 수 있습니다.사용 예 :
dos2unix hello-world.sh
dos2unix
는 파일을 인라인으로 편집합니다.sh ./hello-world.sh
사용하면bash
와sh
가 별개의 기능을 가진 별개의 쉘이라는 것을 알지 못합니다 (Bash는 하위 호환이 가능하기 때문에 반대의 실수는 무해합니다).어쨌든, 단순히 스크립트의 세방 (shebang) 라인에 의존하는 것이 각 스크립트 파일 이름 앞에
bash
또는sh
(또는python
또는perl
또는awk
또는ruby
또는 ...)를 명시 적으로 작성하는 것보다 훨씬 낫습니다.스크립트를 더 이식성있게 만들기 위해 사용하는 공통적 인 줄은 Bash에 대한 경로를 하드 코딩하는 대신
#!/usr/bin/env bash
사용하는 것입니다. 그렇게하면/usr/bin/env
가 존재해야하지만, 그 시점을 넘어선bash
PATH
에 있어야합니다. 많은 시스템에서/bin/bash
는 존재하지 않으므로/usr/local/bin/bash
또는 다른 절대 경로를 사용해야합니다. 이 변화는 그것의 세부 사항을 알아 내야하는 것을 피합니다.
1 또한 sha-bang, hashbang, pound-bang, hash-pling이라고도합니다.
Bash 기본 제공 정보보기
help <command>
이렇게하면 지정된 내장에 대한 Bash 도움말 (수동) 페이지가 표시됩니다.
예를 들어 help unset
하면 다음과 같이 표시됩니다.
unset: unset [-f] [-v] [-n] [name ...] Unset values and attributes of shell variables and functions. For each NAME, remove the corresponding variable or function. Options: -f treat each NAME as a shell function -v treat each NAME as a shell variable -n treat each NAME as a name reference and unset the variable itself rather than the variable it references Without options, unset first tries to unset a variable, and if that fails, tries to unset a function. Some variables cannot be unset; also see `readonly'. Exit Status: Returns success unless an invalid option is given or a NAME is read-only.
간단한 설명이있는 모든 내장 기능 목록을 보려면 다음을 사용하십시오.
help -d
사용자 입력이있는 Hello World
다음은 사용자에게 입력을 요구하고 그 입력을 문자열 (텍스트)로 변수에 저장합니다. 그런 다음이 변수를 사용하여 사용자에게 메시지를 보냅니다.
#!/usr/bin/env bash
echo "Who are you?"
read name
echo "Hello, $name."
명령 read
여기서 변수로 표준 입력 데이터의 한 행 판독 name
. 이것은 $name
사용하여 참조되고 echo
를 사용하여 표준 출력으로 인쇄됩니다.
예제 출력 :
$ ./hello_world.sh
Who are you?
Matt
Hello, Matt.
여기서 사용자는 "Matt"라는 이름을 입력했으며이 코드는 Hello, Matt.
.
그리고 인쇄하는 동안 변수 값에 무엇인가를 추가하려면 다음 예와 같이 변수 이름 주위에 중괄호를 사용하십시오.
#!/usr/bin/env bash
echo "What are you doing?"
read action
echo "You are ${action}ing."
예제 출력 :
$ ./hello_world.sh
What are you doing?
Sleep
You are Sleeping.
여기에 사용자가 작업을 입력하면 인쇄 중에 해당 작업에 "ing"이 추가됩니다.
명명 된 인수 처리
#!/bin/bash
deploy=false
uglify=false
while (( $# > 1 )); do case $1 in
--deploy) deploy="$2";;
--uglify) uglify="$2";;
*) break;
esac; shift 2
done
$deploy && echo "will deploy... deploy = $deploy"
$uglify && echo "will uglify... uglify = $uglify"
# how to run
# chmod +x script.sh
# ./script.sh --deploy true --uglify false
Hello World의 "디버그"모드
$ cat hello.sh
#!/bin/bash
echo "Hello World"
$ bash -x hello.sh
+ echo Hello World
Hello World
-x
사용하면 스크립트의 각 행을 -x
할 수 있습니다. 한 가지 좋은 예가 여기 있습니다.
$ cat hello.sh
#!/bin/bash
echo "Hello World\n"
adding_string_to_number="s"
v=$(expr 5 + $adding_string_to_number)
$ ./hello.sh
Hello World
expr: non-integer argument
위의 프롬프트 된 오류는 스크립트를 추적하기에 충분하지 않습니다. 그러나 다음과 같은 방법을 사용하면 스크립트에서 오류를 찾을 위치를 더 잘 이해할 수 있습니다.
$ bash -x hello.sh
+ echo Hello World\n
Hello World
+ adding_string_to_number=s
+ expr 5 + s
expr: non-integer argument
+ v=
문자열에서 인용의 중요성
인용은 bash의 문자열 확장에 중요합니다. 이것들을 사용하여 bash가 문자열을 파싱하고 확장하는 방법을 제어 할 수 있습니다.
두 가지 유형의 인용이 있습니다.
- Weak : 큰 따옴표를 사용합니다. "
- Strong : 작은 따옴표 사용 : '
당신이 당신의 주장을 확장하기 위해 강탈하고 싶다면, 당신은 약한 인용을 사용할 수 있습니다 :
#!/usr/bin/env bash
world="World"
echo "Hello $world"
#> Hello World
인수를 확장하기 위해 강탈하고 싶지 않다면 강한 인용을 사용할 수 있습니다 :
#!/usr/bin/env bash
world="World"
echo 'Hello $world'
#> Hello $world
이스케이프를 사용하여 확장을 방지 할 수도 있습니다.
#!/usr/bin/env bash
world="World"
echo "Hello \$world"
#> Hello $world
초보자 정보 이외의 자세한 내용은 여기에서 계속 읽을 수 있습니다 .