[쉘스크립트] 텍스트파일의 라인을 읽어 ip와 id 구분하기

텍스트 파일의 각 라인을 읽어 해당 라인에서 ip 와 id 를 구분해서 출력하는 코드이다. 텍스트의 파일은 아래와 같은 형식이다. ip 와 이름-id 는 탭으로 구분된 상태이다.

192.168.10.100	홍길동-gildong
192.168.10.101	김철수-kcs0297

쉘스크립트 코드는 아래와 같다.

#!/bin/bash
IPS=()
IDS=()

i=0

while IFS='' read -r line || [[ -n "$line" ]]; do
    IFS=$'\t'
	tmp=($line)
	IPS[${i}]=${tmp[0]}

	str=${tmp[1]}

	IFS=$'-'
	tmp=($str)
	IDS[${i}]=${tmp[1]}

	i=${i}+1
done < "$1"

for (( i=0; i<${#IPS[@]}; i++)); do
	echo "${IPS[i]} / ${IDS[i]}"
done

쉘스크립트 실행 방법을 ./read.sh hosts 와 같다. 쉘스크립트 파일과 텍스트 파일을 지정해주면 된다. 실행 결과는 아래와 같다.

192.168.10.100 / gildong
192.168.10.101 / kcs0297

참고
– https://stackoverflow.com/questions/1951506/add-a-new-element-to-an-array-without-specifying-the-index-in-bash
– https://unix.stackexchange.com/questions/410710/splitting-a-line-into-array-in-bash-with-tab-as-delimiter
– https://stackoverflow.com/questions/27291158/split-tab-separated-string-into-array-in-bash
– https://stackoverflow.com/questions/6654849/how-to-split-a-string-in-bash-delimited-by-tab

[PHP] 영카트5 DB 테이블별로 덤프하기

영카트5의 DB 데이터를 테이블별로 덤프하기 위한 코드이다. 코드 테스트는 PHP 7.0.x 버전, MariaDB 10.1.x 버전에서 완료했다.

<?php
require_once './_common.php';

$tables  = [];
$exclude = [
    'g5_autosave'
    'g5_visit',
    'g5_visit_sum'
];

$result = sql_query("SHOW TABLES");

for ($i = 0; $row = sql_fetch_array($result); $i++) {
    $tables[] = array_pop($row);
}

$userInfo = posix_getpwuid(fileowner(__FILE__));
$owner = $userInfo['name'];

$dir = '/home/dbbackup/'.$owner.'/'.date('Ymdhi');
mkdir($dir, 0755, true);

// 7일 초과 경과된 data 삭제
$basedir = dirname($dir);
$basetime = time() - 86400 * 7;

foreach (scandir($basedir) as $val) {
    if (in_array($val, array('.', '..')))
        continue;

    $d = $basedir.'/'.$val;

    if (filemtime($d) < $basetime) {
        if (is_dir($d)) {
            foreach (scandir($d) as $v) {
                if (in_array($v, array('.', '..')))
                    continue;

                if (is_file($d.'/'.$v))
                    @unlink($d.'/'.$v);
            }

            rmdir($d);
        } else {
            @unlink($d);
        }
    }
}

// DB 백업
$host = G5_MYSQL_HOST;
$user = G5_MYSQL_USER;
$pass = G5_MYSQL_PASSWORD;
$database = G5_MYSQL_DB;

foreach ($tables as $table) {
    if (in_array($table, $exclude))
        continue;

    $file = $dir.'/'.$table.'.sql';

    exec("mysqldump --user={$user} --password={$pass} --host={$host} {$database} {$table} --result-file={$file} 2>&1", $output);
}

$exclude 에 덤프 때 제외할 테이블을 지정할 수 있다.

Ubuntu 16.04 LTS 계정추가 쉘스크립트

우분투 16.04 LTS 서버 환경에서 계정 추가를 위한 쉘 스크립트이다. 사용자명과 비밀번호를 입력받아 처리한다.

#!/bin/bash

# Input username
read -p "Enter Username: "  username

# Input password
read -s -p "Enter Password: " password

# Create user
groupadd "$username"

useradd -g "$username" -s /bin/bash -m "$username"

echo -e "$password\n$password\n" | sudo passwd "$username"

echo "Complete!"

계정 추가 후 서버 설치 등의 스크립트 코드를 추가할 수 있을 것이다.

PhpSpreadsheet 를 이용한 엑셀파일 다운로드 개발

PHPExcel을 사용해서 엑셀 파일을 생성해왔는데 PHPExcel의 개발이 중단되어 PhpSpreadsheet를 사용하게 됐다.

Githut Repo : https://github.com/PHPOffice/PhpSpreadsheet
개발문서 : https://phpspreadsheet.readthedocs.io/en/develop/

PhpSpreadsheet 패키지 설치는 Composer를 이용하며 사용에 필요한 PHP 버전 등은 아래와 같다.

  • PHP version 5.6 or newer
  • PHP extension php_zip enabled
  • PHP extension php_xml enabled
  • PHP extension php_gd2 enabled (if not compiled in)

Composer 를 이용한 PhpSpreadsheet 설치는 아래의 명령을 실행한다.

composer require phpoffice/phpspreadsheet

Compser를 이용해 PhpSpreadsheet 를 설치했다면 아래의 코드로 엑셀파일 다운로드 기능을 테스트 해볼 수 있다. Read More