웹사이트 검색

쉘 스크립팅 언어의 Linux "변수"에 대한 통찰 - 9부


우리는 이미 Linux Shell Scripting에 관한 일련의 기사를 작성했는데, 이는 그 당시 뜨거운 환영을 받았고 지금도 매우 관련성이 높습니다. 다음은 쉘 스크립팅에 관한 기사 모음에 대한 링크입니다.

  1. Linux 쉘 스크립팅 배우기

이 문서에서는 변수, 실행 및 쉘 스크립트 구현을 살펴보겠습니다.

출력 저장

명령의 출력은 표준 출력이나 파일로 리디렉션될 수 있으며 변수에 저장할 수도 있습니다. 명령의 출력이 너무 커서 화면에 맞지 않는 경우 출력을 파일로 변수에 저장하는 옵션만 남습니다. 출력을 변수에 저장하면 검사 속도가 빨라진다는 장점이 있습니다. 변수는 메모리에 저장되므로 파일에서 검색하는 것에 비해 속도가 빠른 경향이 있습니다.

스크립팅 언어의 변수

변수는 Shell 스크립팅에 사용되는 중요한 구성 요소이며 bash 명령 “Declare”를 사용하여 선언됩니다. 'level'이라는 변수를 선언하려면 아래 명령을 실행해야 합니다.

declare LEVEL

참고: korn 쉘 호환성을 위해 내장된 명령문인 "typecast "를 사용해야 합니다. '선언'은 더 고급 기능이고 모든 기능을 포함하므로 BASH를 사용할 때 권장됩니다.

규칙
  1. 변수 이름은 스크립트에서 변수 사용을 정당화해야 합니다.
  2. 프로그램 전체에서 동일한 변수 이름을 사용하는 것이 좋습니다.
  3. 변수 이름은 대문자일 수도 있고 소문자일 수도 있지만 관례에 따라 쉘 명령은 소문자이므로 혼란을 없애기 위해 변수 이름을 대문자로 사용해야 합니다. 예: TOTAL_BILLED_AMOUNT, SELL_REPORT, ORDER_RECEIPT 등

구현

등호(=)를 사용하여 변수에 값을 할당할 수 있습니다. 변수에 빈 문자열을 할당하려면 등호 뒤에 어떤 값도 제공하면 안 됩니다.

LEVEL =

'LEVEL' 변수에 저장된 값을 확인해보세요.

printf "%i" $LEVEL

대부분의 'C' 프로그래머가 알고 있는 명령인 printf는 데이터를 인쇄합니다. %i – 정수를 나타냅니다. 필요에 따라 문자의 경우 %c, 문자열의 경우 %c로 바꿀 수 있습니다.

$LEVEL: 'LEVEL' 변수의 값 대체자로 작동하는 '$'에 유의하세요.

샘플 출력
printf "%i" $LEVEL
0

변수에 값을 할당합니다.

LEVEL=0

변수에 저장된 데이터를 확인합니다.

printf "%i" $LEVEL
0

참고: 두 경우 모두 변수에 값을 할당하지 않은 경우와 '0< 값을 할당한 경우가 있다는 점이 흥미롭습니다.'을 변수 'LEVEL'에 추가하면 0이 출력됩니다. 두 경우 모두 출력은 동일하지만 쉘 스크립트는 두 변수 선언을 다르게 처리합니다.

변수에 새 값을 할당합니다.

LEVEL=121

변수에 저장된 데이터를 확인합니다.

printf "%i" $LEVEL
121

변수 설정 해제

선언은 BASH 명령으로 실행될 때만 변수를 생성합니다. 이렇게 생성된 변수는 스크립트가 중지되거나 변수가 삭제될 때까지 메모리에 남아 있습니다.

unset LEVEL

BASH의 사전 정의된 변수

BASH에는 50개 이상의 변수가 미리 정의되어 있습니다. 이러한 변수 중 일부는 BASH에 특별한 의미가 있습니다. 예를 들어 RANDOM 변수는 난수를 출력합니다. 설정을 해제했다가 다시 정의하면 원래 변수 값이 영원히 손실됩니다. 따라서 시스템 정의 변수를 사용하지 않는 것이 좋습니다.

다음은 유용한 BASH 변수 목록입니다.

  1. BASH - Bash의 전체 경로 이름입니다.
  2. BASH_ENV - 쉘 스크립트에서 스크립트가 시작되기 전에 실행된 프로필 파일의 이름입니다.
  3. BASH_VERSION - Bash 버전(예: 2.04.0(1)-릴리스)입니다.
  4. 열 - 디스플레이의 줄당 문자 수(예: 80)입니다.
  5. HOSTNAME—컴퓨터의 이름입니다. 일부 Linux 버전에서는 시스템 이름이 될 수 있습니다. 다른 경우에는 정규화된 도메인 이름일 수 있습니다.
  6. HOSTTYPE—컴퓨터 유형입니다.
  7. HOME - 홈 디렉토리의 이름입니다.
  8. OSTYPE - 운영 체제의 이름입니다.
  9. PATH - 실행할 명령을 찾기 위한 검색 경로의 콜론으로 구분된 목록입니다.
  10. PPID - 셸 상위 프로세스의 프로세스 ID입니다.
  11. PROMPT_COMMAND - PS1 기본 프롬프트 문자열을 설정하기 전에 실행할 명령입니다.
  12. PWD - 현재 작업 디렉터리(cd 명령으로 설정됨)
  13. RANDOM - 참조될 때마다 0에서 32767 사이의 난수를 반환합니다.
  14. SHELL - 선호하는 쉘입니다. 당신을 위해 쉘을 시작하는 프로그램의 경우.
  15. TERM - 터미널 에뮬레이션 유형(예: 콘솔)입니다.

단어 분할의 규칙.

LEVEL=0
printf "%i" $LEVEL
0

AND

LEVEL=”0”
printf "%i" $LEVEL
0

두 경우 모두 출력은 동일하게 유지됩니다. 그럼 인용문을 사용했을 때 결과에는 어떤 차이가 있나요?

다른 변수 데이터로도 동일한지 확인해 보겠습니다.

LEVEL=0 ; 1 ; 2 ; 3 ; 4 ; 5
bash: 1: command not found 
bash: 2: command not found 
bash: 3: command not found 
bash: 4: command not found 
bash: 5: command not found
printf "%i" $LEVEL
0

말할 것도 없이 출력이 올바르지 않습니다. BASH는 '0' 뒤의 공백을 종료로 사용하므로 변수 값은 '0'으로 설정됩니다. 이제 아래와 같이 변수에 인용문을 사용해 보겠습니다.

LEVEL=”0 ; 1 ; 2 ; 3 ; 4 ; 5”
printf "%s" $LEVEL 
0;1;2;3;4;5

그래도 결과는 정확하지 않습니다. BASH는 변수 값을 가져와 그 사이의 모든 공백을 제거했습니다. 따라서 printf는 0,1,2,3,4,5를 고유한 값으로 해석하지 않았습니다. 그렇다면 해결책은 무엇입니까?

printf "%s" "$LEVEL" 
0 ; 1 ; 2 ; 3 ; 4 ; 5

응! 변수 대체를 따옴표로 묶는 것이 해결책입니다. 인용문은 쉘의 문자를 그룹화하고 특수 문자를 의미 있는 방식으로 해석합니다.

인용문은 연속해서 사용할 수 있으며 변수 대체를 인용문으로 묶는 것이 좋습니다. 또한 전체 텍스트를 인용문과 분리하는 데에도 사용할 수 있습니다. 여기에 예가 있습니다.

LEVEL=5 
FLAG_MESSAGE="I HAVE CLEARED LEVEL""$LEVEL"". I Deserve appreciation." 
printf “%s” “$FLAG_MESSAGE”
“I HAVE CLEARED LEVEL5. I Deserve appreciation.”

인용된 텍스트 덩어리를 공백으로 분리하면 위에서 설명한 것과 동일한 문제가 발생합니다. bash는 공백을 종료로 처리합니다. 변수 대체의 또 다른 방법은 다음과 같습니다.

LEVEL=5

FLAG_MESSAGE="I HAVE CLEARED LEVEL ${LEVEL}. I Deserve appreciation." 

printf “%s” "$FLAG_MESSAGE" 
“I HAVE CLEARED LEVEL 5. I Deserve appreciation.”

작은따옴표는 BASH가 특수 문자를 인쇄하는 것을 제한합니다.

printf “%s” '$FLAG_MESSAGE'
“$FLAG_MESSAGE”

백슬래시(/)

백슬래시는 한 문자에 대해 작은따옴표처럼 작동합니다. 어떻게 인쇄할지 생각해 보셨나요()?

printf "%c" "\""

%qprintf와 그룹화되면 단어 간격을 보장하기 위해 모든 단어 뒤에 백슬래시를 제공합니다.

LEVEL=5

FLAG_MESSAGE="I HAVE CLEARED LEVEL ${LEVEL}. I Deserve appreciation." 

printf “%q” "$FLAG_MESSAGE" 
“I\ HAVE\ CLEARED\ LEVEL\ 5.\ I\ Deserve\ appreciation.”

지금은 여기까지입니다. 우리는 항상 독자들에게 때때로 유용한 기사를 제공하려고 노력합니다. 위에서 다룬 기사는 방대하므로 예제가 포함된 나머지 주제는 '변수 속성', '변수 내보내기' 등을 포함하는 다음 기사에서 작성됩니다.

그때까지 계속 지켜봐주시고 linux-console.net에 연결하세요. 아래 댓글 섹션에 귀중한 피드백을 제공하는 것을 잊지 마세요.