Hatena::Groupstudymemo

おべんきょめも このページをアンテナに追加 RSSフィード

2011-02-16

シェルスクリプトで外部コマンドの実行

| 13:15 | シェルスクリプトで外部コマンドの実行 - おべんきょめも を含むブックマーク はてなブックマーク - シェルスクリプトで外部コマンドの実行 - おべんきょめも

dateコマンドを使って日付をさかのぼってperlスクリプトを実行する

tmp.sh

DATE=`date -v-1m +%m-%Y`

echo $DATE

i=1
while [ $i -lt 120 ];
do
  DATE=`date -v-${i}m +%m-%Y`
  echo $DATE
  `perl ./script/hoge.pl ${DATE} > ${DATE}`
  echo "perl ./script/hoge.pl ${DATE} > ${DATE}"
  i=`expr $i + 1`
done

2009-07-21

func_pointer2.c、func_pointer3.c

| 19:04 | func_pointer2.c、func_pointer3.c - おべんきょめも を含むブックマーク はてなブックマーク - func_pointer2.c、func_pointer3.c - おべんきょめも

ポインタを使わない例

#include <stdio.h>

int f1(int x) {
  printf("function-1 : value %d\n",x);
}

int f2(int x) {
  printf("function-2 : value %d\n",x);
}

int f3(int x) {
  printf("function-3 : value %d\n",x);
}


int main(void){
    int i;
    char c = 0;

    while(c < '1' || c > '3' ){ /* input check */
        printf("Input number (1-3)\n");
        printf(" (1: func1, 2: func2, 3: func3) \n > ");
        c = getc(stdin); /* user input */
    }

    switch(c) {
    case '1':
        f1(0);
        break;
    case '2':
        f2(1);
        break;
    case '3':
        f3(2);
        break;
    }
}
$ ./func_pointer2
Input number (1-3)
 (1: func1, 2: func2, 3: func3) 
 > 2
function-2 : value 1

関数ポインタを使った例


#include <stdio.h>

int f1(int x) {
  printf("function-1 : value %d\n",x);
}

int f2(int x) {
  printf("function-2 : value %d\n",x);
}

int f3(int x) {
  printf("function-3 : value %d\n",x);
}

int main(void){
    int i;
    char c = 0;
    int (* flist[3])() = {f1, f2, f3};
    while( c < '1' || c > '3' ) { 
        printf("Input number (1-3)\n");
        printf("(1: func1, 2: func2, 3: func3)\n> ");
        c = getc(stdin); /* user input */
    }
    c -= '1';            /* cを整数にする(cには0~2がはいる) */
    (* flist[c])(c);     /* 呼び出し */
}

$ ./func_pointer3 
Input number (1-3)
(1: func1, 2: func2, 3: func3)
> 1

func_pointer.c

| 18:55 | func_pointer.c - おべんきょめも を含むブックマーク はてなブックマーク - func_pointer.c - おべんきょめも

関数ポインタの定義。int (* myfunc)(); で、変数myfuncがintを返す関数へのポインタという宣言をしている。

(*myfunc)(0|1|2);でf1〜f3までの関数引数をそれぞれ渡して呼び出す。

#include <stdio.h>

int f1(int x){
    printf("function-1 : value %d\n", x);
}

int f2(int x){
    printf("function-2 : value %d\n", x);
}

int f3(int x){
    printf("function-3 : value %d\n", x);
}
 
int main(void){
    int (* myfunc) ();

    myfunc = f1;
    (*myfunc) (0);

    myfunc = f2;
    (*myfunc) (1);

    myfunc = f3;
    (*myfunc) (2);
}

$ ./func_pointer
function-1 : value 0
function-2 : value 1
function-3 : value 2

fopen.c

| 18:42 | fopen.c - おべんきょめも を含むブックマーク はてなブックマーク - fopen.c - おべんきょめも

fopen関数引数のファイルを読み込んで、行番号つけて表示する。

#include <stdio.h>
#include <string.h>
#include <stdlib.h>

#define MAX_LINE_SIZE 1024

main( int argc, char* argv[]) {
    char fname[256];
    char buf[MAX_LINE_SIZE];
    int counter = 0, i;
    FILE *fp;

    for(  i = 1; i < argc; i++ ){
        bzero (fname, 256);
        strcpy (fname, argv[i]);
        
        printf("--- %s --- \n", fname);
        
        if( !(fp = fopen(fname, "r"))) {
            printf("File open error.\n");
            exit(1);
        }

        while( fgets(buf, MAX_LINE_SIZE, fp) ) {
            counter++;
            printf("%d: %s\n", counter, buf);
        }
        fclose(fp);
        counter = 0;
    }
}
$ ./fopen test.c 
--- test.c --- 
1: 

2: #include <stdio.h>

3: int main(void) {

4:     printf("Helllo World!\n");

5: }

getopt.c

| 18:37 | getopt.c - おべんきょめも を含むブックマーク はてなブックマーク - getopt.c - おべんきょめも

getopt関数を使えば、コマンドライン引数の一文字だけのオプションだけが扱える。

-v とか -aとか。ここでは"a,b,v,q"がオプション


#include <stdio.h>
#include <unistd.h>
#include <getopt.h>

extern char *optarg;
extern int optind, opterr, optopt;

int main(int argc, char *argv[]) {
    int option;

    opterr = 0;
    while(1) {
        option = getopt(argc, argv, "ab:vq");
        if( option == -1 ) break;

        switch( option ){
            case 'a' : printf("Option %c\n", option ); break;
            case 'b' : printf("Option %c with arg %s.\n", option, optarg ); break;
            case 'v' : printf("Option %c\n", option ); break;
            case 'q' : printf("Option %c\n", option ); break;
            case '?' : printf("Unknown option '%c'\n", optopt ); break;
        }
        optarg = NULL;
    }
}

$ ./getopt -a -b hoge -v -q -?
Option a
Option b with arg hoge.
Option v
Option q
Unknown option '?'

param.c

| 18:30 | param.c - おべんきょめも を含むブックマーク はてなブックマーク - param.c - おべんきょめも

引数の受け渡しをする。argcは引数の数が格納されるが、コマンド名自体も数に入っている。

#include <stdio.h>

main(int argc, char* argv[]) {
    int i;

    printf("%d arg(s) exists\n", argc - 1);
    for(  i = 0; i < argc; i++ ){
        printf("argb[%d] is \"%s\". \n", i, argv[i] );
    }

}

$ ./param aaa bbb ccc
3 arg(s) exists
argb[0] is "./param". 
argb[1] is "aaa". 
argb[2] is "bbb". 
argb[3] is "ccc". 

structure.c

| 18:22 | structure.c - おべんきょめも を含むブックマーク はてなブックマーク - structure.c - おべんきょめも

構造体の定義をする。person_specという構造体にそれぞれの型を定義する。

#include <stdio.h>

struct person_spec{
    float tall;
    float weight;
    int age;
};

int main(void);
    struct person_spec MySpec;
    MySpec.tall   = 175.5;
    MySpec.weight = 61.2;
    MySpec.age    = 24;
}

構造体のコピー。代入するだけ。

#include <stdio.h>

typedef struct st {
    int a;
    int b;
} ST;

main(void){
    ST a,b;
    a.a = 2;
    a.b = 3;

    b = a; /* 構造体のコピー */

    printf("b.a = %d, b.b = %d\n", b.a, b.b);

    a.a = 10;
    a.b - 20;

    printf("b.a = %d, b.b = %d\n", b.a, b.b);

}

$ ./structure 
b.a = 2, b.b = 3
b.a = 2, b.b = 3

pointer2.c

| 18:16 | pointer2.c - おべんきょめも を含むブックマーク はてなブックマーク - pointer2.c - おべんきょめも

#include <stdio.h>
#include <string.h>
#include <stdlib.h>

int main(){

    float x, y;
    float *fp, *fp2;

    x = 6.5;

    printf("Value of x is %f, address of x %ld\n", x, &x);

    fp = &x;

    printf("Value in memory location fp is %f\n", *fp );

    *fp = 9.2;
    printf("New value of x is %f = %f\n", *fp, x);

    *fp = *fp + 1.5;
    printf("Final value of x is %f \n", *fp, x);

    y = *fp;
    fp2 = fp;

    printf("Transfered value into y = %f and fp2 = %f\n", y, *fp2);

}
$ ./pointer2 
Value of x is 6.500000, address of x -1073743536
Value in memory location fp is 6.500000
New value of x is 9.200000 = 9.200000
Final value of x is 10.700000 
Transfered value into y = 10.700000 and fp2 = 10.700000

pointer.c

| 18:11 | pointer.c - おべんきょめも を含むブックマーク はてなブックマーク - pointer.c - おべんきょめも


#include <stdio.h>
int main(void){
    int a;
    int *b;

    a = 100;
    printf("a:[%x, %d], b:[%x]\n", &a, a, b);

    b = &a;
    printf("a:[%x, %d], b:[%x, %d]\n", &a, a, b, *b);

    a = 200;
    printf("a:[%x, %d], b:[%x, %d]\n", &a, a, b, *b);

}

$ ./pointer
a:[bffff958, 100], b:[1000]
a:[bffff958, 100], b:[bffff958, 100]
a:[bffff958, 200], b:[bffff958, 200]

func.c

| 18:10 | func.c - おべんきょめも を含むブックマーク はてなブックマーク - func.c - おべんきょめも

#include <stdio.h>

int calc( int a, int b ){
    return a * b;
}

int main(void){
    int i, j;
    for(  i = 1; i < 10; i++ ) {
        for(  j = 1; j < 10; j++ ) {
            printf("%d\n", calc(i,j));
        }
        printf("\n");
    }
}

$ ./func
1
2
3
4
5
6
7
8
9

2
4
6
8
10
12
14
16
18

3
6
9
12
15
18
21
24
27

4
8
12
16
20
24
28
32
36

5
10
15
20
25
30
35
40
45

6
12
18
24
30
36
42
48
54

7
14
21
28
35
42
49
56
63

8
16
24
32
40
48
56
64
72

9
18
27
36
45
54
63
72
81

array.c

| 18:09 | array.c - おべんきょめも を含むブックマーク はてなブックマーク - array.c - おべんきょめも


#include <stdio.h>
int main (void) {
    int a;
    int i[3];
    i[0] = 10;
    i[1] = 20;
    i[2] = 30;
    for(  a = 0; a < 3; a++ ){
        printf("value[%d] = %d\n", a, i[a]);
    }
}

$ ./array 
value[0] = 10
value[1] = 20
value[2] = 30

variable.c

| 18:07 | variable.c - おべんきょめも を含むブックマーク はてなブックマーク - variable.c - おべんきょめも

#include <stdio.h>
int main(void){
    int i;
    i = 10;
    printf("value = %d\n", i );
}
$ ./variable 
value = 10

hello world

| 18:05 | hello world - おべんきょめも を含むブックマーク はてなブックマーク - hello world - おべんきょめも


#include <stdio.h>
int main(void) {
    printf("Helllo World!\n");
}