티스토리 뷰

Unix 및 Linux OS에서 제공하는 Shell은 기본적으로 변수에 대한 Type을 정의하지 않는다.

이런 변수할당 유형을 약타입(Weakly Typed) 이라고 표현한다.

 

반면에 C언어나 Go Lang 등은 변수의 선언시 Type을 미리 정의해 줘야하는 강타입(Strong Typed) 언어이다.

 

무튼간에, Shell 과 같은 약타입 언어들은 변수의 타입을 미리정의 할 필요없이 사용자가 필요에 따라 유연하게 정의해서 사용할 수 있는 장점이 있는 반면,

 

변수에 대입 될 실 데이터에 대한 타입 문제로 인해 의도치 않은 Script 오류를 겪게되는 단점도 있다.

 

때문에  Shell Script 를 통해 Logic 을 구현할 때는 반드시 아래 예시와 같이, 사용중인 변수에 대입된 값이 Null 인지 Not Null 인지, 또 정수(Integer), 실수(Float), 문자열(String) 등인지 구분하는 Logic을 구현해 줘야, 예기치 않은 오류를 미리 방지 할 수 있다.

 

1. Null, Not Null , 정수(Integer), 실수(Float), 문자열(String) 구분 로직 실행 예시

[root@Centos6-01 shell]# 
[root@Centos6-01 shell]# ./check_val.sh 
Null
[root@Centos6-01 shell]# 
[root@Centos6-01 shell]# ./check_val.sh 11
Not Null(Integer)
[root@Centos6-01 shell]# 
[root@Centos6-01 shell]# ./check_val.sh aa
Not Null(String)
[root@Centos6-01 shell]# 
[root@Centos6-01 shell]# ./check_val.sh 11aa
Not Null(String)
[root@Centos6-01 shell]# 
[root@Centos6-01 shell]# ./check_val.sh 11.11
Not Null(Float)
[root@Centos6-01 shell]# 
[root@Centos6-01 shell]#  

 

2. Script 작성

[root@Centos6-01 shell]# 
[root@Centos6-01 shell]# vi check_val.sh 
#!/bin/bash
#Script made by ktds, Kwang-Min Choi(helperchoi@gmail.com)

export LANG=C
export LC_ALL=C

USER_VAL=$1

if [ -z ${USER_VAL} ]
then
	echo "Null"
else
	if [[ "${USER_VAL}" = *[a-zA-Z]* ]]
	then
		echo "Not Null(String)"
	else
		if [[ "${USER_VAL}" = *.* ]]
		then
			echo "Not Null(Float)"
		else
			echo "Not Null(Integer)"
		fi
	fi
fi

 

반응형
반응형
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday