2007/12/27 木曜日

gd.sh改良しました。

Posted in シェルスクリプト by 管理人 @ 12 月 27, 2007

以前紹介したzsh auto_pushd のシェルスクリプト

gd.shというの書いたのですが、少し改良しました。

改良した点はdirs -v -l で表示される重複したディレクトリは表示しないよう

にしたのと、逆順ソートにして最新のディレクトリが一番下に表示されるように

しました。改良時間は1時間くらいなのでうまく動かない場合があるかもしれませんが

その時はコメントお願いします。

では プログラムです。

ここから————–

#!/bin/sh
dirs -v -l | awk '{
    a[$1]=$2;
    b[$1]=$2;
}
END{
    for( i=0; i<NR; i++){
        work=a[i];
        checknum=0;
        for( j=i+1; j<NR; j++){
            if( work == a[j] ){
                b[j] = "skip";
            }
        }
    }
    for ( i=NR-1; i>-1; i--){
        if ( b[i] != "skip"){
            printf("%d %s\n",i,b[i]);
        }
    }
}'
echo 移動したい番号を選んでください。
read newdir
# 入力値に1をプラスし、その終了ステータスを判定する。
expr 1 + $newdir >/dev/null 2>&1
case $? in
    0 | 1 )var=`dirs -v -l |grep -w $newdir |awk '{printf("%s\n",$2)}'`
        cd $var;;
    * ) echo " 数字以外が入力されました >$newdir" ;;
esac

ここまで————–

2007/7/5 木曜日

シェルスクリプト コンパイラ shc

Posted in シェルスクリプト by 管理人 @ 7 月 5, 2007

みなさんLinuxやUnixでバックアップや毎日定期的に動かしたい

プログラムなどはシェルで作ってそれをcronなどで登録してると

思うのですが、シェルの中身はテキストなので、パスワードもそのまま丸見えの状態ではないでしょうか?

セキュリティ上パスワードが丸見えというのは、危険だと思うので

どうにかなかならないものかと思っていたら
シェルスクリプトをバイナリの実行形式にコンパイルするツールを発見しました。

その名もshc です。
これでコンパイルしたら一緒にC言語ファイル(中身はたぶんよくわからない用になっている)も作成されるので、シェルスクリプトを配布したいが、ソースは公開したくないと時にも使える。

もちろんシェルの暗号化にも使える。

一度試してみてはいかがでしょうか?

仕事に使えるLinuxシェルスクリプト~bashで作る実用サンプル41
千葉 真人
日経BP社
売り上げランキング: 96255
UNIX シェルスクリプト辞典 (Desktop reference)
志田 智 川井 義治 田淵 貴昭 米田 聡
翔泳社
売り上げランキング: 290733
おすすめ度の平均: 5.0

5 よみやすい

2007/5/28 月曜日

zsh auto_pushd のシェルスクリプト

Posted in シェルスクリプト by 管理人 @ 5 月 28, 2007

LinuxやUnixを使っている人はシェルというものにこだわりがあるものだ。
solarisやBSD系の人はだいたいcsh tcsh。Linuxの人はbashが定番なのだが、
zshはご存知だろうか?アルファベットのzがついているので最後のシェルという
意味らしいのだが、その名にふさわしく最強のシェルだそうだ。

どんな感じかは漢のzshというコラムに
zshの魅力が紹介されている。

この中のsetopt auto_pushd というオプションが便利だな~と私は使ってみて思った。
ということで、シェルスクリプトで似たような感じができないかなと思ったので、作ってみました。
けっこうzshが入ってる環境は少ないもので(笑)

とりあえず下記のプログラムをファイルに保存し実行権限をつけてください。
ここではgd.shという名前に保存したとする。

ここから————–

#!/bin/sh
dirs -v
echo 移動したい番号を選んでください。
read newdir

# 入力値に1をプラスし、その終了ステータスを判定する。
expr 1 + $newdir >/dev/null 2>&1
case $? in
    0 | 1 )var=`dirs -v -l | grep -w $newdir | awk '{printf("%s\n",$2)}'`
               cd $var;;
        * ) echo " 数字以外が入力されました >$newdir" ;;
esac

ここまで————–

そして、pathが通っているとこに持っていってください。
次にaliasに下記を設定してください。
alias gd=’. gd.sh’
alias cd=’pushd > /dev/null’

これで終了です。
# gd
で起動できると思います。
あとはお好きにしてください。

また便利なシェルスクリプトを作ったら載せてみたいと思います。

XHTML 1.0 CSS 2.0 RSS