#!/bin/sh

nIdx=0
for HOST in {1..61};
do
    nIdx=`expr $nIdx + 1`
    HOSTNAME="hostname$HOST"
    #RESULT=`echo null check  | tr -d "\n" `
    #printf "IP : %10s HOSTNAME : %s \n" $RESULT $HOST
    RESULT=`rsh $HOSTNAME hostname | tr -d "\n"` 

    printf "HOSTNAME : %-15s RESULT : [%16s]\n" "$HOSTNAME" "$RESULT"
done


- 시간대별 로깅
LOG=`date +"%Y-%m-%d %T  "|/usr/bin/tr -d "\n";/usr/bin/mysqladmin -u<foo> -p<foo_pass> status`; echo $LOG >> /tmp/mysql_status.log



매번 작성때마다 헷갈리고 잘 까먹어서 기본 문법만 정리해둔 링크 따움

출처 : http://webtn.tistory.com/entry/UNIX-%EB%82%98%EB%8F%84%EA%B0%9C%EB%B0%9C%EC%9E%90%EB%8B%A4-%EC%9E%89-%EC%B0%B8-%EC%89%AC%EC%9A%B4-Shell-%EC%8A%A4%ED%81%AC%EB%A6%BD%ED%8A%B8-%ED%95%9C%EB%B2%88-%ED%95%B4%EB%B3%BC%EA%B9%8C%EC%9A%94


1. 쉘 스크립트                             

간단한 쉘 스크립트

$ vi hello.sh

(hello.sh)
#!/bin/bash
echo hello world

$ chmod 755 hello.sh

$ ./hello.sh
hello world


- #! 은 쉘에게 이 프로그램을 실행하기 위해서 #! 다음에 오는 아규먼트를 실행프로그램으로
사용한다는 것을 알려주기 위해서 사용된다.

- Unix/Linux system은 Windows와 달리 파일의 확장자명(.exe .com 등)으로 실행파일 유무를
결정하지 않으며, 파일권한 설정의 변경을 통하여 실행파일로 결정한다. 따라서 스크립트
파일을 실행하기 위해서는 파일에 실행권한을 주어야 한다.


2. 주석                                      

 - "#" 에서부터 라인의 마지막까지가 주석으로 처리된다.#!/bin/bash
# 만든이 : comp-ta
# 하는일 : hello world 를 출력한다.
echo "hello world" # 문자열을 출력한다.


3. 변수                                      

- C 언어와 같은 변수 선언을 필요로 하지 않는다.
- 기본적으로 데이터를 string(문자열)로 저장한다.(수치를 대입해도 실제 수치가 아닌
문자열이 저장된다.) 따라서 타입이 없고 아무 값이나 저장할 수 있다.
- 변수의 값을 사용할 때는 변수명앞에 "$"를 붙여서 사용하고, 값을 대입할때는 "$"를 붙이지
않는다.
- 변수에 데이타를 저장하기 위해서는 대입연산자 "=" 를 사용한다. 대입연산자와,
피연산자/연산자 사이에는 공백이 존재하면 안 된다.
varname=value

- 산술연산 : 모든 것이 문자열로 저장되기 때문에 산술연산을 하기 위해서는 변수=$((산술식))
과 같이 사용.
a=1
b=2
c=$(($a+$b))
echo $c
(3 출력)


4. 명령행 인자(argument)              

  - $1~ $n - 넘겨진 인자들
  - $* : 스크립트에 전달된 인자들을 모아놓은 문자열. 하나의 변수에 저장되며 IFS 환경변수의
     첫번째 문자로 구분된다. (IFS : internal field separator)
  - $@ : $*과 같다. 다만 구분자가 IFS변수의 영향을 받지 않는다.
  - $0 : 실행된 쉘 스크립트 이름
  - $# : 스크립트에 넘겨진 인자의 갯수

(test1.sh)
#!/bin/bash
echo "This Script Executable File : $0"
echo "Argument Count : $#"
echo "Argument List \$* : $*"
echo "Argument List \$@ : $@"
echo "Argument 1 : $1"
echo "Argument 2 : $2"
echo "Argument 3 : $3"
echo "Argument 4 : $4"

(실행)
$chmod 755 test1.sh
$./test1.sh a1 a2 a3 a4
This Script Executable File : ./test1.sh
Argument Count : 4
Argument List $* : a1 a2 a3 a4
Argument List $@ : a1 a2 a3 a4
Argument 1 : a1
Argument 2 : a2
Argument 3 : a3
Argument 4 : a4


5. 제어구조                                 

1. [ if / else ]
- 조건을 test하여 참이면 then부분을, 거짓이면 else부분을 실행.
- test 조건들은 "[ ]" 사이에 쓰면된다. "[" 과 "]" 사이에는 반드시 공백문자가 들어가야 한다.
- 변수 값, 파일 특징, 명령의 실행 여부 등 다양한 test 조건이 있다.
 Syntax Example
  if [condition]
  then
    statements
  elif [condition]
  then
    statements...
  else
    statements
  fi
  if [ $1 -lt $2 ]
  then
    echo $1 is less than $2
  elif [ $1 -gt $2 ]
  then
    echo $1 is greater than $2
  else
    echo $1 equals to $2
  fi

- 참고 : test 명령 조건
 문자열비교
  [ string ] - string이 빈 문자열이 아니라면 참
  [ string1 = string2 ] - 두 문자열이 같다면 참
  [ string1 != string2 ] - 두 문자열이 다르면 참
  [ -n string ] - 문자열이 null(빈 문자열) 이 아니라면 참
  [ -z string ] - 문자열이 null(빈 문자열) 이라면 참
 산술비교
  [ expr1 -eq expr2 ] - 두 표현식 값이 같다면 참 ('EQual')
  [ expr1 -ne expr2 ] - 두 표현식 값이 같지 않다면 참 ('Not Equal')
  [ expr1 -gt expr2 ] - expr1 > expr2 이면 참 ('Greater Than')
  [ expr1 -ge expr2 ] - expr1 >= expr2 이면 참 ('Greater Equal')
  [ expr1 -lt expr2 ] - expr1 < expr2 이면 참 ('Less Than')
  [ expr1 -le expr2 ] - expr1 <= expr2 이면 참 ('Less Equal')
  [ ! expr ] - expr 이 참이면 거짓, 거짓이면 참
  [ expr1 -a expr2 ] - expr1 AND expr2 의 결과 (둘다 참이면 참, 'And')
  [ expr1 -o expr2 ] - expr1 OR expr2 의 결과 (둘중 하나만 참이면 참, 'Or')
 파일조건
  [ -b FILE ] - FILE 이 블럭 디바이스 이면 참
  [ -c FILE ] - FILE 이 문자 디바이스 이면 참.
  [ -d FILE ] - FILE 이 디렉토리이면 참
  [ -e FILE ] - FILE 이 존재하면 참
  [ -f FILE ] - FILE 이 존재하고 정규파일이면 참
  [ -g FILE ] - FILE 이 set-group-id 파일이면 참
  [ -h FILE ] - FILE 이 심볼릭 링크이면 참
  [ -L FILE ] - FILE 이 심볼릭 링크이면 참
  [ -k FILE ] - FILE 이 Sticky bit 가 셋팅되어 있으면 참
  [ -p FILE ] - True if file is a named pipe.
  [ -r FILE ] - 현재 사용자가 읽을 수 있는 파일이면 참
  [ -s FILE ] - 파일이 비어있지 않으면 참
  [ -S FILE ] - 소켓 디바이스이면 참
  [ -t FD ] - FD 가 열려진 터미널이면 참
  [ -u FILE ] - FILE 이 set-user-id 파일이면 참
  [ -w FILE ] - 현재 사용자가 쓸 수 있는 파일(writable file) 이면 참
  [ -x FILE ] - 현재사용자가 실행할 수 있는 파일(Executable file) 이면 참
  [ -O FILE ] - FILE 의 소유자가 현재 사용자이면 참
  [ -G FILE ] - FILE 의 그룹이 현재 사용자의 그룹과 같으면 참
  [ FILE1 -nt FILE2 ] - : FILE1이 FILE2 보다 새로운 파일이면 ( 최근파일이면 ) 참
  [ FILE1 -ot FILE2 ] - : FILE1이 FILE2 보다 오래된 파일이면 참
  [ FILE1 -ef FILE2 ] - : FILE1 이 FILE2의 하드링크 파일이면 참 


2. for
 - 지정된 범위 안에서 루프를 수행한다. 범위는 어떤 집합도 가능하다.
 - (Bash 2.03버전 이후 버전) C style의 for loop 사용가능
    = 아래 3 문장은 모두 같은 의미이다 =
    for a in 1 2 3 4 5 6 7 8 9 10
    for a in $(seq 1 10)
    for ((a=0;a<10;a++))
 - 범위가 하나의 string이라면 IFS를 이용해 구분가능.
 - [in list]를 생략한다면 기본값은 “$@”

 Syntax Example
for name [in list]
do
   statements that can use
  $name.
done
IFS=:
for 
dir in $PATH
do
   ls –ld $dir
done



3. while
 - 어떤 조건이 참인 동안 코드를 반복
 Syntax Example
while condition
do
    
statements...
done
count=0
while [ $count -lt 10 ]
do
    echo $count
     count=$(($count+1))
done
4. until
 - 어떤 조건이 참일 때까지 (거짓인 동안) 반복
 Syntax Example
until condition
do
statements...
done
count=0
until [ 
$count -gt 10 ]
do
   
echo $count
    count=$(($count+1))
done


5. case
 - C의 switch구문과 비슷한 역할을 함
 - C의 switch 구문은 정수나 문자 같은 단순한 값을 검사하는 반면, Bash의 case는
 - 와일드카드 (?, *) 사용이 허락되는 어떤 패턴을 놓고 문자열을 검사
 Syntax Example
case expression in
  pattern1 )
    statements ;;
  pattern2 )
    statements ;;
  ...
esac
case $1 in
   *.jpg )
      echo jpg: Graphic
   File!! ;;
   *.txt )
      echo txt: Text File!! ;;
   * )
      echo Unknown File!! ;;
esac

6. select
 - Korn Shell, Bash Shell에만 존재
 - 간단한 메뉴를 제공
 - select의 루프 내에서는 자동적으로 루프를 벗어날 수 없기 때문에 반드시 break문등을
   사용해서 루프를 벗어나야 한다.
 - prompt string을 변경하기 위해서는 쉘변수 PS3를 이용.
 Syntax Example
select name [in list];
do
   statements that can use   $name...
...
done
#!/bin/bash
echo "다음 중 scripting language 에 속하는 것은?"
PS3=”숫자를 선택하세요 : “
select var in "Bash script" "C/C++ "Java” "Exit"
do
if [ "$var" = "Bash script" ]
then
   echo "정답입니다."
   break
elif [ "$var" = "Exit" ]
then
   echo "종료합니다."
   exit 1
else
   echo "$var 을 선택하셨습니다. 오답입니다."
   echo "다음 중 scripting language 에 속하는 것은?"
fi
cf.) read : 직접 사용자 입력을 받음.

#!/bin/bash
echo “이름을 입력해주세요 : “
read NAME
echo "Hi $NAME!"



6. Quoting                                 

* Single Quotes
    - Single Quotes 안의 모든 특수 문자를 보통 문자로 취급
    - Single Quotes 안에 또 다른 Single Quote를 쓸 수 없음

$ echo 2 * 3 > 5 is a valid inequality. ………(X)
$ echo '2 * 3 > 5 is a valid inequality.’ ………(O)
$ echo Hatter's tea party ………(X)
$ echo Hatter\'s tea party ………(O)
$ echo 'Hatter'\''s tea party' ………(O)

* Double Quotes
 - Weak Single Quotes
 - Single Quotes와 달리 $, `(backquote), ₩(이스케이프)는 처리
 - 문자열 안에서 다음을 참조할 때 사용
    - 변수확장 : $varname
    - 명령 : $(command) 혹은 `command` -single quote가 아니라 backquote임.
    - 산술연산구문 : $((1+1))

$ echo "2 * 3 > 5 is a valid inequality."
$ echo "Hatter\'s tea party"

$ echo "path=$PATH"
$ echo "current directory=$(pwd)"
$ echo "current directory=`pwd`"
$ echo "1 + 1 = $((1+1))"


7. 함수                                      

 - 다른 프로그램 언어에서와 같이 코드를 재사용하거나 모듈화를 위해 함수를 사용
 - 함수는 함수가 불리기 전에 정의되어야 한다. (C처럼 함수를 미리 선언하는 방법은 없음)
 - parameter : 함수는 자신에게 넘어온 인자를 $1, $2와 같이 인자의 위치로 참조한다.
 - return value : 함수는 반드시 정수값만 리턴할 수 있다. 이 리턴값은 $? 변수에 저장된다.

#!/bin/bash

add()
{

  result=$(($1+$2))

  return $result
}
a=3
b=5
add $a $b
sum=$?

echo "$a + $b = $sum"


8. Backup script code                  

#!/bin/bash
if [ -z $1 ]||[ -z $2 ]; then
  echo usage: $0 source_dir target_dir
else
  SRC_DIR=$1
  DST_DIR=$2
  OF=output.$(date +%y%m%d%H%M%S).tar.gz
  if [ -d $DST_DIR ]; then
    tar -cvzf $DST_DIR/$OF $SRC_DIR
  else
   mkdir $DST_DIR
   tar -cvzf $DST_DIR/$OF $SRC_DIR
  fi
fi


9. 참고하기 

http://wiki.kldp.org/HOWTO//html/Adv-Bash-Scr-HOWTO/index.html

여리글 참고 하시면 엄청 고수가 될수 있어요.


출처 : http://www.mimul.com/pebble/default/2008/06/14/1213445280000.html

1. JFreeChart
 - 지원 기능 : pie charts (2D and 3D), bar charts (horizontal and vertical, regular and stacked), line charts, scatter plots, time series charts, high-low-open-close charts, candlestick plots, Gantt charts, combined plots, thermometers
 - 지원 언어 : Java 지원
 - 예제 사이트 : http://www.jfree.org/jfreechart/samples.html

2. Cewolf
 - 지원 기능 : Line [XY], [3D] Pie, [3D] Horizonal Bar, [3D] Vertical [XY] Bar, [3D] Stacked Vertical Bar, Area [XY], Scatter Plot, Candlestick, High Low, Gantt, Overlaid, Combined
 - 지원 언어 : Java 지원
 - 예제 사이트 : http://cewolf.sourceforge.net/new/demo.html

3. PHP/SWF Charts
 - 지원 기능 : Line, Column, Stacked column,  Floating column, 3D column, Stacked 3D column, Parallel 3D column, Pie, 3D Pie, Bar, Stacked bar,  Floating bar, Area, Stacked area, Candlestick, Scatter, Polar, Mixed, Composite, Joined
 - 지원 언어 : PHP + Flash (swf), SP, CFML, Perl언어에서도 지원
 - 예제 사이트 : http://www.maani.us/charts/index.php?menu=Gallery

4. Open Flash Chart(플래시 기반)
 - 지원 기능 : Data Lines, Bar Chart, 3D Bar Chart, Glass Bar Chart, Fade Bar Chart, Sketch Bars, Area Chart, Bars + Lines, Pie Chart, Pie Chart Links, Scatter Chart, Mixed Scatter, High Low Close, Candle
 - 지원 언어 : 플래시 기반으로 Java, Perl, Python, Ruby and Rails, php, .net 지원
 - 예제 사이트 : http://teethgrinder.co.uk/open-flash-chart/index.php

5. AmCharts(플래시 기반)
 -  지원 기능 : Animated or static, Value axis, Linear, logarithmic value axis scale, bullets, Clickable columns/bars, Gradient fills, plot area Axis
 - 지원 언어 :  플래시 기반으로 PHP, .NET, Java, Ruby on Rails, Perl, ColdFusion 언어 지원
 - 예제 사이트 : http://www.amcharts.com/column

6. FusionCharts(플래시 기반)
 - 지원 기능 : 다양한 기능 지원함
 - 지원 언어 : cross-browser, cross-platform flash chart로서 ASP.NET, ASP, PHP, JSP, ColdFusion, Ruby on Rails, simple HTML pages 지원
 - 예제 사이트 : http://www.fusioncharts.com/Free/Gallery.asp?gMenuItemId=3

7. Flot
 - 지원 기능 : Line 기능 등 기본적인 기능에 줌 등 다양한 옵션을 줄 수 있음
 - 지원 언어 : Javascript + jQuery로 구성되어 있어 웹기반 언어는 모두 지원, Cross Browser지원
 - 예제 사이트 : http://people.iola.dk/olau/flot/examples/

8. Flotr
 - 지원 기능 : Basic Axis, Basic Bar, Basic Legend, Mouse Track, Mouse Zoom, JSON Data
 - 지원 언어 : Javascript + Prototype 1.6.0.2로 구성되어 있어 웹기반 언어는 모두 지원, Cross Browser지원
 - 예제 사이트 : http://www.solutoire.com/experiments/flotr/examples/basic.html

9. PlotKit
 - 지원 기능 : HTML Canvas: Safari 2+, Opera 9+, Firefox 1.5+, IE 6 (in emulated mode), SVG: Opera 9+, Firefox 1.5+ (see note), IE6 with Adobe SVG
 - 지원 언어 : Javascript + MochiKit 1.3로 구성되어 있어 웹기반 언어는 모두 지원, Cross Browser지원
 - 예제 사이트 : http://media.liquidx.net/js/plotkit-tests/svg-sweet.html

10. Emprise JavaScript Charts
 - 지원 기능 : Interactive, Axis Scaling, Auto Zooming, Scrolling, Stackable Series, Multiple Chart Types, Ajax-Driven Data, Compatible, Plugin Free, Customizable
 - 지원 언어 : Javascript로 구현되어 있고 Cross Browser지원
 - 예제 사이트 : http://www.ejschart.com/examples/index.php

11. Visifire
 - 지원 기능 : 실버 라이트 설치되면 다양한 차트 기능이 지원됨
 - 지원 언어 : Silverlight Charts
 - 예제 사이트 : http://www.visifire.com/silverlight_charts_gallery.php

정리 감사합니다~ 


매번 까묵는다.. 그래서 정리했다.


리틀엔디안(little-endian) - Intel 계열 cpu
 32bit 형(4바이트) 값 : x01020304 <- 상위 바이트가 'x01' 이라할 경우
   -> 하위 바이트 부터 정렬 : 04,03,02,01

빅엔디안(big-endian) - sparc / RISC cpu
 32bit 형(4바이트) 값 : x01020304 <- 상위 바이트가 'x01' 이라할 경우
   -> 상위 바이트부터 정렬 : 01,02,03,04

네트웍 통신에서는 바이트 오더를 빅엔디안을 사용을 한다.

use strict;
  ## restrict unsafe use of variables for rest of block

use strict 'vars'; ## restrict unsafe use of variables for rest of block
 EX Code)
 use strict 'vars';
 use vars '$foe';
 
 $SomePack::fee = 1;
 my $file = 10;
 $foe = 7;
 $foo = 9;
 

use strict 'refs';  ## restrict unsafe use of references for rest of block
 EX Code)
 use strict 'refs';
 $ref = \$foo;
 print $$ref;
 $ref = "foo";
 print $$ref;

 
use strict 'subs';  ## restrict unsafe use of barewords for rest of block
 EX Code)
 use strict 'subs';
 $SIG{PIPE} = Plumber;
 # blows up (assuming Plumber sub not declared yet)
 $SIG{PIPE} = "Plumber";
 # okay, means "main::Plumber" really
 $SIG{PIPE} = \e&Plumber; # preferred form

no strict;

오늘은 여기까징~~


CGI-FastTemplate :
링크 : http://search.cpan.org/~jmoore/CGI-FastTemplate-1.09/FastTemplate.pm


HTML::DynamicTemplate :
링크 : http://search.cpan.org/~brianng/HTML-DynamicTemplate-0.95/DynamicTemplate.pm


일단 두개만..

PHP 에서 Smarty 등과 같은걸 찾을라 했는데 레퍼런스가 별로 없다.
영어가 안되니 참으로 답답허구나.. ㅜㅜ



## 변수 레퍼런스
$v = 10;
$rv = $$v;


## 배열 레퍼런스
@aArr = ("one", "two", "three");
$raArr = \@aArr;
print "arr reference ".$$raArr[0]."\n"; ## eq expression 'print $$raArr[0]'
print "arr reference ".$raArr->[0]."\n"; ## eq expression 'print $$raArr[0]'


## 해쉬 레퍼런스
%hHash = ("one","1","two","2");
$rhHash = \%hHash;
print "hash reference ".$$rhHash{'one'}."\n";
print "hash reference ".$rhHash->{'one'}."\n";

서브 루틴에서 사용(Subroutines)
@aArray = (1,2,3);

printArray(\@aArray);

sub printArray
{
    my ($raArray) = @_;
    for ($i = 0; $i<3); $i++)
    {
       print "array[$i] = $raArray->[$i]\n";
    }
}

파일제어
 open(),close()
 
 open(FILE,"> /etc/hosts");
 close(FILE);
 
 open(FILE, ">> /home/log/secure.log");
 close(FILE);
 
 '<' 읽기 모드(기본값 r)
 '>' 쓰기 모드(w)
 '>>' 내용더하기 (a)
 '+C<' 읽기쓰기 모드
 '+>' 읽기쓰기 모드
 '|'
 '|'

주의점
  open(파일핸들, "파일제어기호 파일명(경로포함)"); 에서 파일제어기호와 파일명에는 콤마등의 기호가 없어야 한다.


select()
TODO


eof,eof()
'()' 의 있고 없고의 차이는 파일의 끝의 대상이 하나인가 여러개인가의 차이인듯.. (영어가 딸려서)
아래는 perldoc 의 원문이다.
In a "while (<>)" loop, "eof" or "eof(ARGV)" can be used to detect the end of each file,
"eof()" will only detect the end of the last file.


 


 - 논리적 연산자
  && -> 일반적인 AND 연산자.
  || -> 일반적인 OR 연산자.
 
  $value > 5 || print "value는 5보다 크다"; ## $value 가 5보다 작아야 출력됨
  $value > 5 || print "value는 5바다 크다"; ## $value 가 5보다 커야 출력됨


 - 조건부 연산자 (Conditional Expression)
  ==  eq       같다
  !=  ne        다르다
  <=> cmp    C 에서 제공하는 strcmp 랑 비슷, 같으면 '0', 앞이 크면 1, 뒤가 크면 -1
  > gt           크다
  >= ge        크거나 같다
  < lt            작다
  <= le         작거나 같다


- 파일 테스트 연산자
  -e $a   $a 파일이 존재하면 참
  -r  $a   $a 파일이 읽기 가능하면 참
  -w $a   $a 파일이 쓰기 가능하면 참
  -d  $a   $a 가 디렉토리이면 참
  -f   $a   $a 가 일반 파일이면 참
  -T  $a   $a 가 텍스트파일이면 참
  
  
- 제어문(Flow Control)
 while
 $n = 50;
 while( $n > 0)
 {
     print $n."\n";
     $n--;
 }  ## $n 이 1이 될때까지 출력


 until ($a == 100)
 {
     print "until a  is 100";
 } ## $a 가 100이 되면 출력을 멈춤
 
  
 foreach
 @aArr = ("aaa","bbb","ccc");
 foreach $szTmp(@aArr)
 {
     print "$szTmp\n";
 }


 if...elsif...else
 $n = 1;
 if($n == 1)
 {
     print "n is $n\n";
 }
 elsif ($n == 2)
 {
     print "n is $n\n";
 }
 else
 {
     print "n is $n\n";
 }

 unless
 unless($destination eq $home)
 {
     print "im not going home.\n";
 }


  next, last
  next -> continue 와 비슷한..
  last -> break 와 비슷한..

  조금 더 정리를...
#include <stdio.h>
#include <stdlib.h>

int
main(int argc, char **argv)
{
        while(argc--)
        {
                printf("%s\n", *argv++);
        }
        exit(EXIT_SUCCESS);
}

+ Recent posts