웹사이트 검색

쉘 스크립팅의 'Linux 변수' 이해 및 작성 - 10부


Linux 쉘 스크립팅 언어는 항상 뜨거운 주제였으며 앞으로도 계속 그럴 것입니다. Shell Scripting Language는 마술적이며 다른 언어와 마찬가지로 스크립팅 언어로도 프로그램을 수행하기가 매우 쉽습니다. 그러나 우리가 하고 있는 일과 그 결과가 무엇인지에 대한 심층적인 지식이 필요합니다.

독자들을 위해 우리가 작성한 모든 쉘 스크립팅 기사는 마지막 기사인 "Linux 변수에 대한 통찰력"을 포함하여 높이 평가됩니다. 마지막 기사를 새로운 레벨로 확장하고 있습니다.

변수 속성

Linux 환경의 각 변수에는 특정 옵션이 있으며 이를 '속성'이라고 합니다. 이러한 옵션이나 속성은 상황에 따라 "declare" 명령을 사용하여 켜기끄기로 설정할 수 있습니다.

변수 속성의 예는 해당 변수에 대한 정수 속성을 켜는 '-i' 스위치를 사용하는 것입니다. 숫자가 아닌 값이 '-i' 스위치에 전달되더라도 오류 메시지가 표시되지 않고 정수 해석으로 '0'이 출력됩니다. 아래 예를 보면 더 명확해집니다.

변수 Integer, bill=121을 선언합니다.

avi@localhost:~$ declare -i bill=121

변수 bill의 값을 인쇄합니다.

avi@localhost:~$ printf "%d\n" "$bill" 

121

변수 값을 문자열로 둡니다. 변수 bill은 이미 선언되었으므로 두 번째로 선언할 필요가 없습니다. 변수의 값을 다음과 같이 변경하십시오.

avi@localhost:~$ bill=tecmint

이제 변수 bill의 값을 다시 인쇄하십시오.

avi@localhost:~$ printf "%d\n" "$bill" 

0

오류 메시지 대신 '0'을 확인하세요.

이제 문제는 이미 선언된 변수의 속성을 어떻게 알 수 있는가 하는 것입니다.
avi@localhost:~$ declare -p bill 

declare -i bill="121"

여기서는 -p(인쇄를 나타냄) 스위치가 구출됩니다.

다시 말하지만, 변수의 속성을 끄려면 어떻게 해야 합니까?

변수의 속성을 끄기 전환하려면 전환 바로 앞에 +(더하기) 기호를 붙이는 것이 모두 필요합니다. 아래 예를 보면 더 명확해집니다.

위 변수의 정수 속성을 끄기 전환하세요.

avi@localhost:~$ declare +i bill

변수의 값을 확인하세요.

avi@localhost:~$ printf "%d\n" "$bill" 

bash: printf: bill: invalid number
0

이제 스위치 문자열을 사용하여 변수 값을 인쇄하십시오.

avi@localhost:~$ printf "%s\n" "$bill" 

tecmint

위의 예에서 bash는 숫자가 아닌 값을 오류로 판단할 수 없지만 printf는 숫자가 될 수 있는 것과 숫자가 될 수 없는 것을 해석하고 있습니다.

읽기 전용 변수

읽기 전용 메모리(ROM)라고 들어보셨을 텐데요, 읽기 전용 변수란 무엇입니까? ROM과 비슷한 점이 있나요?

읽기 전용 메모리와 같은 읽기 전용 변수는 일단 할당되면 값을 변경할 수 없는 것입니다. 따라서 읽기 전용이라고 합니다. 해당 변수에 대한 새 값을 쓰거나 편집하거나 수정할 수 없습니다. 다음은 예제를 사용한 그림입니다.

읽기 전용(-r) 변수 이름을 지정하고 값은 "linux-console.net "입니다.

avi@localhost:~$ declare -r name="linux-console.net"

위에서 선언한 변수의 값을 인쇄합니다.

avi@localhost:~$ printf "%s\n" "$name" 

linux-console.net

변수의 값을 변경해 보십시오.

avi@localhost:~$ declare -r name="Avishek" 

bash: declare: name: readonly variable

위에서 설명한 대로 읽기 전용 변수의 속성은 '+' 기호를 사용하여 변경할 수 있습니다.

Linux에서 변수 내보내기

쉘 스크립트에 선언된 모든 쉘 변수는 스크립트가 실행될 때까지 사용할 수 있습니다. 스크립트 외부에는 스크립트의 변수가 존재하지 않습니다. 스크립트 외부에서 변수를 사용할 수 있게 만드는 프로세스를 변수 내보내기라고 합니다.

변수는 내보내려는 항목을 셸에서 인식하는 스위치 declare -x(내보내기)를 사용하여 셸 외부로 내보낼 수 있습니다. 선언 내보내기 스위치를 다음과 같이 사용할 수 있습니다.

avi@localhost:~$ declare -x variable=”Constant_Value”

스크립트가 실행되는 동안 변수에 대한 모든 변경 사항은 변수를 스크립트 외부로 내보내면 손실됩니다. 변수 내보내기는 쉘 스크립팅에서 매우 중요합니다.

읽기 전용이고 스크립트 외부에서 사용할 수 있는 변수를 원하므로 -r 스위치와 -x 스위치를 동시에 사용해야 합니다.

avi@localhost:~$ declare -rx variable=”Constant_Value”

환경 변수

프로그램과 이를 실행하는 프로그램 간에 공유되는 변수입니다. 환경 변수를 내보낼 수 있지만 속성을 할당할 수는 없습니다.

위의 이론을 실무적으로 이해한다. 여기에는 0.sh1.sh라는 두 개의 스크립트가 있습니다.

0.sh
#!/bin/bash 
declare -rx name=Tecmint 
bash 0.sh 
exit 0

그리고 두 번째 스크립트는 다음과 같습니다.

1.sh
#!/bin/bash 
printf "%s\n" "$name" 
name=linux-console.net 
printf "%s\n" "$name"
exit 0

여기서 무슨 일이 일어나고 있는지, 변수(이름)가 읽기 전용으로 선언되어 내보내지고 두 번째 스크립트가 호출된 직후에 발생합니다.

두 번째 스크립트는 첫 번째 printf 문에서 내보낸 첫 번째 스크립트의 변수를 인쇄했습니다. 두 번째 printf 문에서는 'name' 변수에 할당된 새 값을 보여줍니다.

변수가 읽기 전용이어서 어떻게 다시 할당할 수 있는지 걱정할 필요가 없습니다. “스크립트가 실행되는 동안 변수에 적용된 모든 변경 사항은 변수를 스크립트 외부로 내보내면 손실됩니다. ”

참고자료

declare 명령은 아래의 모든 스위치와 그 조합을 허용합니다.

  1. -a : 배열을 선언합니다.
  2. -f : 기능 및 정의를 표시합니다.
  3. -F : 기능 이름을 표시합니다.
  4. -r : 변수를 읽기 전용으로 선언합니다.
  5. -x : 변수를 내보내기 가능으로 선언합니다.
  6. -I : 변수를 정수로 선언합니다.

지금은 여기까지입니다. 바로 다음 기사에서는 이 주제를 닫기 전에 'eval' 명령을 사용하여 변수를 대체하는 방법과 bash에 이미 정의된 변수에 대해 논의할 것입니다. 여러분이 심층적인 스크립팅을 향한 여정을 즐기시기 바랍니다. 그때까지 linux-console.net에 접속하여 계속 지켜봐 주시기 바랍니다.