Computer >> 컴퓨터 >  >> 프로그램 작성 >> BASH 프로그래밍

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

우리는 이미 Linux 셸 스크립팅에 대한 일련의 기사를 작성했습니다. 그 당시에는 따뜻하게 환영받았고 지금도 많은 관련이 있습니다. 다음은 쉘 스크립팅에 대한 기사 모음에 대한 링크입니다.

  1. Linux 셸 스크립팅 배우기

이 기사에서는 변수를 볼 수 있습니다. , 실행 및 쉘 스크립트에서의 구현.

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

출력 저장

명령의 출력은 표준 출력이나 파일로 리디렉션될 수 있으며 변수에도 저장할 수 있습니다. 명령의 출력이 화면에 맞지 않을 만큼 충분히 크면 출력을 변수에 파일로 저장하는 옵션만 남습니다. 출력을 변수에 저장하는 것의 장점 중 하나는 검사 속도가 더 빠릅니다. 변수는 메모리에 저장되므로 파일에서 검색하는 것보다 빠른 경향이 있습니다.

스크립팅 언어의 변수

변수는 쉘 스크립팅에서 사용되는 중요한 구성 요소이며 bash 명령 "Declare를 사용하여 선언됩니다. ". 변수를 선언하려면 '레벨 ', 아래 명령어를 실행해야 합니다.

$ declare LEVEL

참고 :"typecast를 사용해야 합니다. ", korn 셸 호환성에 대한 기본 제공 설명입니다. 'declare'는 더 고급스럽고 모든 기능을 포함하므로 BASH를 사용할 때 권장됩니다.

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

구현

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

$ LEVEL =

'LEVEL' 변수에 저장된 값을 다음과 같이 확인합니다.

$ printf "%i" $LEVEL

printf , 대부분의 'C 명령 ' 프로그래머가 알고 데이터를 인쇄합니다. %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)-release)입니다.
  4. COLUMNS - 디스플레이의 줄당 문자 수입니다(예: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" "\""

%q일 때 printf로 그룹화 , 단어 간격을 보장하기 위해 모든 단어 뒤에 백슬래시를 제공합니다.

$ LEVEL=5

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

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

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

그때까지 Tecmint.com에 계속 관심을 갖고 연결해 주세요. . 아래 댓글 섹션에 소중한 피드백을 제공하는 것을 잊지 마세요.