ChaichanPapa-World !

燈明日記(2004/06

◆ インデックス

◆ 2004年6月

2004/06/28(月)C言語基礎講座『はじめてでないC』

とりあえず、リリースします。

なにか、ご意見、ご感想、間違い、励まし等ございましたら、宜しくお願い致します。

2004/06/22(火)次ぎの仕事

次ぎの仕事は、プログラマでなく、オペレータです。

プログラマの時のように適当にオペレーションをするのではなく、注意深く意識を高くして、事にあたらなければならない感じです。銀行系なので、特にそうみたいです。

で、CシェルスクリプトとSQLが必須とのことで、今、勉強をし直しているところです。

また、『Bシェルスクリプトのすすめ』のタイトル変更を考えているところです。

そう、『BシェルCシェルスクリプトのすすめ』とか。

2004/06/21(月)Bシェルスクリプトのすすめ

まだ、75%の出来ですが、公開します。

なぜか、新しい仕事では、Cシェルがメインらしい……。Cシェルもマスターしないと……。

2004/06/16(水)新しい仕事

とりあえず、90%決まりました。詳細は追って……。

とりあえず、以下の5つを胸に面接に臨みました。

  1. いつでも、平常心。
  2. いつでも、明るく前向きに。
  3. すべては、移り変わり。
  4. すべては、繋がっている。
  5. そして、すべては、自分。

2004/06/11(金)絶望と希望

突然ですが、実は、ちゃいちゃんパパは、出向先の会社にリストラされてしまいました!!

まさに、『寝耳に水』『青天の霹靂』……。

7000人を擁する会社の生命線を握るシステムの開発保守を担当していたので、『まさか自分が』と言う思いで一杯です。

それを告げられた時、この歳(48)で、まちゃがまだ小学生で、今の給料を維持できなくなるのは、目に見えていて、目の前が真っ暗になりました。

また、丸13年間掛けて作り上げてきた『会社の生命線を握るシステム』を否定された思いと、だれも慰留してくれない寂しい思い……。まさに絶望いたしました。

しかし、家族と仲間の暖かい励ましのお蔭様で、なんとか、新しい仕事に希望を見出そうと思える自分になりました。

また、リストラなんて、ちゃいちゃんのことに比べたら大した事無いと思えるようになりました。そして、ちゃいちゃんが亡くなった時にもらった以下のメッセージを思い出しました。

あなたが乗り越えられないような苦労を、神仏はけっして与えられません。
それは、あなたがそれに耐えて成長していける人だから与えられる試練です。
いつの日か「あのときの悲しみ、あのときの苦しみのお陰で、いまの私がある」
と思えるときが必ずくるものです。  合掌  平成12年元旦

神様は、成長が足りない私に、また試練を課したようです。

すべては、移り変わり、すべては一つの真理に貫かれている。諸行無常の響きあり……。

新しい仕事が見つかるまでは、しばらく、ネットはお休みします。











神様なんか、大嫌いだ!!

2004/06/03(木)Bシェルスクリプトの書き方と実行方法について

以下のサンプルは、ごく簡単なシェルスクリプトです。 viエディッタ等を使って以下の2行を書き込んだtest01.shファイルを用意してください。

サンプル:ファイル名 test01.sh
#!/usr/bin/sh
echo これはBシェルスクリプトです。

1行目は、たぶん、シバン(shebang)と云い、その後に続く部分をインタプリンタのパス名を指定します。ここでは「/usr/bin/sh」というプログラムを指定しています。しかし、システムによって違う場合もありますので、事前につぎのコマンドで確認することが出来ます。

$ which sh 

尚、シバン以外で1カラムが『#』のときは、コメントになります。

また、Bシェルスクリプトとは、基本的には『テキストファイル内にUNIXコマンドを書き並べたもの』です。 2行目はこのスクリプトで実行されるコマンドです。

実行結果:
$ chmod u+x test01.sh
$ test01.sh
これはBシェルスクリプトです。

1行目のchmodコマンドでスクリプトファイルに実行権を与えています。これをしないと実行権限がないために、スクリプトの実行ができません。

2行目で実際にスクリプトを実行しています。システムによってはパス設定の関係で、./test01.sh としなければならない場合もあります。

3行目が実行結果です。スクリプト2行目の『echo これはBシェルスクリプトです。』が出力されました。

基本は、これだけです。しかし、この後に解説する制御文、変数、コマンド置換、引数渡し等を組み合わせると、非常に強力なツールになることを実感できるでしょう。

参考

2004/06/02(水)Bシェルスクリプトのすすめ

C言語に続いて、またまた、突然ですが、当分Bシェルスクリプトです(謎)。

はじめに

UNIXを使いこなすには、GUI(Graphical User Interface)でなく、CUI(Character User Interface)が必要です。

逆に云えば、コマンドを文字入力して、いかにUNIXに仕事をさせるのかが、UNIXを使いこなすと云うことです。

そして、文字入力したコマンドを解釈するものをシェルと云い、UNIXには沢山の種類のシェルがあります。

で今回、UNIXならどのOSでも必ずバンドルされているBシェル(sh)のスクリプトを勉強致しましょう…ということです。

とにかく、Bシェルスクリプトです! これ以外は捨てましょう。特にCシェルスクリプトは……。 理由は、追って説明して参ります。

シェルとは

UNIXを一回でも使った人はおわかりと思いますが、ログインするとコマンドプロンプトが出ます。 そして、ls等のコマンドを入力し、Enterキーを押します。すると、コマンドが実行されて結果が表示されます。

実は、ls等のコマンド名を解釈して実際のコマンドを呼び出し、実行させるものをシェルと云います。 また、複数のコマンドをテキストファイルに記述して、それをコマンドとして実行させることが出来ます。 このような、コマンド(テキストファイル)をシェルスクリプトと云います。

で実は、シェルスクリプトにもcsh,ksh,tcsh等いろいろありまして、結果的には、Bシェルスクリプト(sh)が一番なんです。 理由は、おいおい明らかにしていきます。

理由を知りたいお急ぎの方は、以下のページを。ただし、BシェルとCシェルをかなり知っていないと理解できません。

2004/06/01(火)『はじめてでないC』その9

今回で構造体は最終回にしたいと思います。

構造体を使用する時の基本は、型宣言をしてから、実体宣言をいたします。以下の感じです。

struct db_login {           /* 型宣言 */
       char svnm[7];
       char svnm2[13];
};
struct db_login shisha_sv;  /* 実体宣言 */

しかし、2つも宣言をするのは、面倒だと思ったあなた、そう、実は、1つで型宣言と実体宣言が一緒に出来ます。

struct db_login {
       char svnm[7];
       char svnm2[13];
} shisha_sv;  

使い分けは、同じ構造体を沢山使う時は、型宣言を一つしておいて、実体宣言を沢山する。 一つの時は、型宣言と実体宣言の一体型を使う。

サンプル:型宣言と実体宣言の構造体一体型バージョン
#include <stdio.h>

#define SHISHA_CNT 7

struct db_login {
       char svnm[7];
       char svnm2[9];
       char loginid[31];
       char password[31];
       char db_string[45];
} shisha_sv[SHISHA_CNT]={
       "svr001","A支社","id","passwd","svr001s",
       "svr002","B支社","id","passwd","svr002s",
       "svr003","C支社","id","passwd","svr003s",
       "svr004","D支社","id","passwd","svr004s",
       "svr005","E支社","id","passwd","svr005s",
       "svr006","F支社","id","passwd","svr006s",
       "svr007","G支社","id","passwd","svr007s",
};

int main()
{
int  i;

    for(i=0; i<SHISHA_CNT; i++){
        printf("-----------------------\n");
        printf("hostname=%s\n", &shisha_sv[i].svnm[0]);
        printf("hostname2=%s\n", &shisha_sv[i].svnm2[0]);
        printf("loginid=%s\n", &shisha_sv[i].loginid[0]);
        printf("password=%s\n", &shisha_sv[i].password[0]);
        printf("db_string=%s\n", &shisha_sv[i].db_string[0]);
    }
}

また、typedefを使用する時の基本は、型宣言をしてから、typedef宣言をいたします。以下の感じです。

struct db_login {
       char svnm[7];
       char svnm2[13];
       char loginid[31];
       char password[31];
       char db_string[45];
};
typedef struct ora_login ORA_LOGIN;

しかし、2つも宣言するのは、面倒だと思ったあなた、そう、実はこちらも、1つで型宣言とtypedef宣言が一緒に出来ます。

typedef struct db_login {
       char svnm[7];
       char svnm2[13];
       char loginid[31];
       char password[31];
       char db_string[45];
} DB_LOGIN;

使い分けは、個人の趣味の範囲になるかと思います。たぶん。

サンプル:typedefの構造体一体型バージョン
#include <stdio.h>

#define SHISHA_CNT 7

typedef struct db_login {
       char svnm[7];
       char svnm2[9];
       char loginid[31];
       char password[31];
       char db_string[45];
} DB_LOGIN;


int main()
{
DB_LOGIN shisha_sv[SHISHA_CNT+1]={
       "svr001","A支社","id","passwd","svr001s",
       "svr002","B支社","id","passwd","svr002s",
       "svr003","C支社","id","passwd","svr003s",
       "svr004","D支社","id","passwd","svr004s",
       "svr005","E支社","id","passwd","svr005s",
       "svr006","F支社","id","passwd","svr006s",
       "svr007","G支社","id","passwd","svr007s",
       "\0"
};

    sub(&shisha_sv[0]);
}
int sub(DB_LOGIN *p_shisha_sv)
{

    for(;p_shisha_sv->svnm[0]; p_shisha_sv++){
        printf("-----------------------\n");
        printf("hostname=%s\n", &p_shisha_sv->svnm[0]);
        printf("hostname2=%s\n", &p_shisha_sv->svnm2[0]);
        printf("loginid=%s\n", &p_shisha_sv->loginid[0]);
        printf("password=%s\n", &p_shisha_sv->password[0]);
        printf("db_string=%s\n", &p_shisha_sv->db_string[0]);
    }
}