728x90

# 주석 [ # ]

 

#으로 시작하는 줄은 주석입니다.

 

# 명령어 구분자 [ ; ]

 

두 개 이상의 명령어를 한 줄에서 같이 쓸 수 있게 해줍니다.

 

# 점 (dot) 명령어 [ . ]

 

source 명령어와 동일합니다.

 

"점"(dot)이 정규 표현식(regular expression) 으로 해석될때는, 한 개의 문자와 일치됩니다.

 

# 명령어 치환 (command substitution) [ ` ] backtics(백틱)

 

`명령어` 라고 하면 명령어의 결과를 변수값으로 설정할 수가 있습니다. 다른 말로 backticks나 역쿼우트(backquote)라고도 합니다.

 

# 널 명령어(null command) 쉘의 "NOP"(no op, 아무 동작도 않함)에 해당합니다. [ : ] 

 

쉘 내장 명령인 true의 동의어라고도 볼 수 있습니다. 주의할 점은 :은 bash 내장 명령이기 때문에 종료 상태는 0이라는 것 입니다.

 

예제 )

if condition

then : # 아무것도 안하고 계속 진행

else

 어떤 작업

fi


# 배열 초기화 [ Array=(element1 element2 element3) ]

 

# 명령어 그룹 [ (a=hello; echo $a) ]

 

a=123

( a=321; )

 

echo "a = $a" # a = 123

# 소괄호 안의 "a"는 지역변수 처럼 동작합니다.

 

# 중괄호 확장 [ { } ]

 

grep Linux file*.{txt.html*}

 

# "fileA.txt" , "file2.txt", "fileR.html", "file-87.html" 등등의 파일에서

# "Linux"가 들어 있는 것을 모두 찾음

 

빈 칸은 쿼우트(quote)나 이스케이프(escape)되지 않고 중괄호에서 쓰일 수 없습니다.

echo {file1,file2}\ :{\ A," B",' C'}

 

# file1 : A file1 : B file1 : C file2 : A file2 : B file2 : C

 

 

예제 1) 코드 블럭과 I/O 재지향

 

#!/bin/bash

# /home/rsccmw/logtest/file.txt 읽기

 

File=/home/rsccmw/logtest/file.txt

 

{

read line1

read line2

} < $File

 

echo "$File.txt 파일의 첫번째 줄:"

echo "$line1"

echo

echo "$File 파일의 두번째 줄:"

echo "$line2"

 

exit 0

 


#!/bin/bash
# str-test.sh: Testing null strings and unquoted strings,
# but not strings and sealing wax, not to mention cabbages and kings...
# (옮긴이: ??? :)

# if [ ... ]  를 쓸께요.


#  문자열이 초기화 안 됐다면 정해진 값을 갖지 않는데
#+ 이런 상태를 "널"(null)이라고 부릅니다(0 과는 다릅니다).

if [ -n $string1 ]    # $string1 은 선언도 초기화도 안 됐습니다.
then
  echo "\"string1\" 은 널이 아닙니다."
else  
  echo "String \"string1\" 은 널입니다."
fi  
# 틀렸죠.
# 초기화가 안 됐는데도 널이 아닌 것으로 나오네요.


echo


# 다시 해보죠.

if [ -n "$string1" ]  # 이번엔 $string1 을 쿼우트 시켜서 해보죠.
then
  echo "\"string1\" 은 널이 아닙니다."
else  
  echo "\"string1\" 은 널입니다."
fi      # 테스트문에서는 문자열을 꼭 쿼우트 시키세요!


echo


if [ $string1 ]       # 이번엔 달랑 $string1 만 두고 해보죠.
then
  echo "\"string1\" 은 널이 아닙니다."
else  
  echo "\"string1\" 은 널입니다."
fi  
# 이건 잘 되네요.
# 문자열을 쿼우트 시키는 게("$string1") 좋은 습관이긴 하지만
# [ ] 테스트 연산자는 혼자 쓰이면 문자열이 널인지 아닌지를 잘 알아냅니다.
#
# Stephane Chazelas 가 지적한 것처럼,
#    if [ $string 1 ]   는 인자가 "]" 하나고,
#    if [ "$string 1" ]  는 인자가 빈 "$string1"과 "]", 두 개입니다.



echo



string1=initialized

if [ $string1 ]       # , $string1 을 다시 혼자 써보죠.
then
  echo "\"string1\" 은 널이 아닙니다."
else  
  echo "\"string1\" 은 널입니다."
fi  
# 역시 결과가 맞게 잘 나오죠.
# 마찬가지로 이유로 쿼우트 해주는 것이("$string1") 좋습니다. 왜냐하면...


string1="a = b"

if [ $string1 ]       # $string1 을 또 혼자 씁니다.
then
  echo "\"string1\" 은 널이 아닙니다."
else  
  echo "\"string1\" 은 널입니다."
fi  
# 이제 "$string1"을 쿼우트 해 주지 않으면 틀린 결과가 나옵니다!

exit 0

728x90

'네트워크' 카테고리의 다른 글

표준 입력,출력,에러 / 파일 디스크립터  (0) 2022.02.25
프록시  (0) 2022.02.22
HTTPS 통신에대한 생각정리  (0) 2022.02.21
SSL / TLS protocol and Cipher suite  (0) 2022.02.18

+ Recent posts