[shell script] bash read command

참고 : http://wiki.redjini.com/linux/script

옵션

  • -n number : number 수만큼의 문자를 입력받음
  • -p string : 프로프트에 string 문자열 출력
  • -a        : 입력을 Array형태로 저장
  • -s        : 입력을 프로프트에 출력하지 않음
  • -d char   : 입력이 char 이면 read 명령을 종료함.

 shell script 내에서 문자열을 array에 저장하기

#!/bin/sh

VMSTATLOG=$(vmstat 1 2 | sed -e '1,3d')
read -ra ARRAY <<< "$VMSTATLOG"
echo "${ARRAY[@]}"
#  VMSTATLOG에 저장된 값을 ARRAY변수에 배열로 저장
#  구분자는 기본 공백, 구분자를 변경하려면 IFS 값을 설정하면됨.

참고 : [shell script] 배열(Array) 사용하기

shell script 내에서 문자열 입력받기

#!/bin/sh

read -n 1 -p "input [y/N]:"
echo "$REPLY"
#기본적으로 read는 입력값을 REPLY 변수에 저장함

#!/bin/sh

read -n 1 -p "input [y/N]:" yesno
echo "$yesno"
#입력값을 REPLY이 아닌 yesno 변수에 저장

#!/bin/sh

read  -p "input yes|no count :" yesno count
echo "$yesno"
echo "$count"
#입력값을 순차적으로 yesno, count에 저장
# 구분자는 기본 공백, 구분자를 변경하려면 IFS 값을 설정하면됨.

2014/02/11 18:58 2014/02/11 18:58
태그 : , , ,
글 걸기 주소 : 이 글에는 트랙백을 보낼 수 없습니다

참고 : http://wiki.redjini.com/linux/script

배열(Array) : 선언하기

array_name_1=("value 1" "value 2" "value 3")
array_name_2=(1 2 3)

배열(Array) : 참조하기

array_name=("value 1" "value 2" "value 3")

echo "array_name[0]     = ${array_name[0]}"  #print array_name[0]
echo "array_name[2]     = ${array_name[2]}"  #print array_name[2]
echo "array_name[*]     = ${array_name[*]}"  #print array_name all item
echo "array_name[@]     = ${array_name[@]}"  #print array_name all item
echo "array_name index  = ${!array_name[@]}" #print array_name index number
echo "array_name size   = ${#array_name[@]}" #print array_name size
echo "array_name[0] size= ${#array_name[0]}" #print array_name[0] size

출력 결과

array_name[0]     = value 1
array_name[2]     = value 3
array_name[*]     = value 1 value 2 value 3
array_name[@]     = value 1 value 2 value 3
array_name index  = 0 1 2
array_name size   = 3
array_name[0] size= 7

배열(Array) : 크기 구하기

array_name_1=("value 1" "value 2" "value 3")

echo ${#array_name_1[@]}  #print "3"

배열(Array) : 출력하기

array_name=("value 1" "value 2" "value 3")

echo "array = ${array_name[@]}"
# 출력 결과
# array = value 1 value 2 value 3

printf "value = %s\n" "${array_name[@]}"
# 출력 결과
# value = value 1
# value = value 2
# value = value 3

for value in "${array_name[@]}"; do
    echo $value
done
# 출력 결과
# value 1
# value 2
# value 3

for (( i = 0 ; i < ${#array_name[@]} ; i++ )) ; do
    echo "value[$i] = ${array_name[$i]}"
done
# 출력 결과
# value[0] = value 1
# value[1] = value 2
# value[2] = value 3

for index in ${!array_name[*]} ; do
    printf "%4d: %s\n" "$index" "${array_name[$index]}"
done
# 출력 결과
#   0: value 1
#   1: value 2
#   2: value 3

 

2014/01/10 19:36 2014/01/10 19:36
태그 : , , ,
글 걸기 주소 : 이 글에는 트랙백을 보낼 수 없습니다

참고 : http://wiki.redjini.com/linux/script

사용법

function name(){
  shell command
}

예제

function my_function(){
   echo "my function"
}

my_function

지역변수 (Local variables)

value=1234;

function my_function(){
   local value=5678
   echo "function: value= ${value}"
}

echo "before  : value= ${value}"

# call my_function
my_function

echo "after   : value= ${value}"

실행결과

before  : value= 1234
function: value= 5678
after   : value= 1234

인자 : parameters

function my_function(){
   local value=$1
   echo "my_function= ${value}"
}

# call my_function
my_function 5678

결과 전달받기

#!/bin/sh
function my_function(){
   local value=$1
   echo "my_function= ${value}"
}

# call my_function
result=$(my_function 5678)

echo "my_function [ ${result} ]"

function my_function(){
    echo "argv: $1 $2"
    return 10
}

# call my_function
my_function "myname" "acepro"
result=$?

echo "my_function [ ${result} ]"

function my_function(){
    echo "argv: $1 $2"
    eval "$3='result'"
}

# call my_function
result=""
my_function "myname" "acepro" result

echo "my_function [ ${result} ]"

2014/01/09 18:23 2014/01/09 18:23
태그 : , , ,
글 걸기 주소 : 이 글에는 트랙백을 보낼 수 없습니다

[linux] 메모리

Linux에서 사용중인 실제 사용중인 메모리 구하기

설명

Linux "free" 실행 결과 

[root@redjini script]# free -m
             total       used       free     shared    buffers     cached
Mem:          1010        817        193          0        121        115
-/+ buffers/cache:        579        431
Swap:         2000         66       1933

실제 Free Memory :  free(193 MB) + buffers(121 MB) + cached(115 MB)

스크립트

#!/bin/sh

MEM_TOTAL=`free | grep ^Mem | awk '{print $2}'`
MEM_FREE=`free | grep ^Mem | awk '{print $4}'`
MEM_BUFFER=`free | grep ^Mem | awk '{print $6}'`
MEM_CACHED=`free | grep ^Mem | awk '{print $7}'`

REAL_MEM_FREE=$(($MEM_FREE+$MEM_BUFFER+$MEM_CACHED))
REAL_MEM_USED=$(($MEM_TOTAL-$REAL_MEM_FREE))

echo "TOTAL: $MEM_TOTAL"
echo "FREE : $REAL_MEM_FREE"
echo "USED : $REAL_MEM_USED"

참고

2013/12/17 14:50 2013/12/17 14:50
태그 : , , ,
글 걸기 주소 : 이 글에는 트랙백을 보낼 수 없습니다

[shell script] directory exists check

#!/bin/sh
if [ -d "$DIRECTORY" ]; then
     echo "$DIRECTORY exists." 
fi

#!/bin/sh
if [ ! -d "$DIRECTORY" ]; then
    echo "$DIRECTORY doesn't exists." 
fi

#!/bin/sh
if [ -L "$DIRECTORY" ]; then
    echo "$DIRECTORY symbolic link" 
fi 

2013/11/20 18:40 2013/11/20 18:40
글 걸기 주소 : 이 글에는 트랙백을 보낼 수 없습니다

[shell script] 실행 경로 구하기

#!/bin/sh
EXE_PATH=$(readlink -f $(dirname "$0"))

echo ${EXE_PATH}
2013/10/24 12:02 2013/10/24 12:02
태그 : , ,
글 걸기 주소 : 이 글에는 트랙백을 보낼 수 없습니다

셈플소스

#!/bin/sh
name="abcd efghi"

#변수값 출력
echo "\$name       =$name  "
echo "\${name}     =${name}"

#문자열 길이 출력
echo "\$name length=${#name}"

#변수의 특정 위치부터 출력
#${name:offset}
echo "\${name:2}   =${name:2}"
#${name:offset:length}
echo "\${name:2:5} =${name:2:5}"

#변수 초기화
#${name:=value}
#name 변수 값이 null이면 value 값으로 초기화
echo "\${name2:=1234 5}=${name2:=1234 5}"
echo "\${name2:=123456}=${name2:=123456}"

#${name:+value}
#name 변수 값이 null 아니면 value값 return
echo "\${name2:+123456}=${name2:+123456}"
echo "\${name3:+123456}=${name3:+123456}"

#${name:-value}
#name 변수 값이 null 이면 value값 return, 아니면 name 값 return
echo "\${name2:-123456}=${name2:-123456}"
echo "\${name3:-123456}=${name3:-123456}"

#${name:?value}
#name 변수 값이 null 아니면 name 값을 출력하고 null이면 value 값 출력후 오류
echo "\${name2:?123456}=${name2:?123456}"
echo "\${name2:?123456}=${name3:?123456}"

스크립트 실행 결과

$name       =abcd efghi
${name}     =abcd efghi
$name length=10
${name:2}   =cd efghi
${name:2:5} =cd ef
${name2:=1234 5}=1234 5
${name2:=123456}=1234 5
${name2:+123456}=123456
${name3:+123456}=
${name2:-123456}=1234 5
${name3:-123456}=123456
${name2:?123456}=1234 5
value.sh: line 37: name3: 123456
2008/07/29 09:59 2008/07/29 09:59
태그 : , ,
글 걸기 주소 : 이 글에는 트랙백을 보낼 수 없습니다