2012-06-15

簡単なbashスクリプト: ユーティリティ・スクリプト

漸くBashの感じが掴めてきた。特に汎用性の高いファンクション群を纏めることで、再利用が効率的になると思った。

取り敢えず、次のスクリプト・ファイル、「$HOME/myBash/My_Utilities」を作成した。
#!/bin/bash

###################################################################
# 目的:このユーティリティ・ファイルに、小さな関数群を纏めておく。                     #
# 開始:   2012-06-14  (木) 10:00                                           #
###################################################################
#
#   要件: ~/.bashrcに、下記を追加する。
#            「. myBash/My_Utilities」
#            「myBash」は$HOMEの直下で$PATHが通っている。
#
#   使い方:
#           通常の関数としてコール
#           引数は個別の「利用」を参照。
#           作り終えたら、ClipMenu → my用語 →「関数説明の雛形」を用いて説明する。
#
###################################################################

#++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
# My_Home #
#機能: show "Users home directory"
#利用:引数はなし。"$HOMO"と同じだった。;-P)
#       1) MyHome(ret)
#       2) cd `MyHome`
#
#効能: スクリプト中で「~」を使うと「/var/なんとか」に飛ばされるので。
#
#制作:
#   1) 開始 2012-06-14  (木) 10:42 by mNeji
#
#------------------------------------------------------------------------#
My_Home()
#------------------------------------------------------------------------#
{
    echo /Users/$( whoami )
}

#------------------------------------------------------------------------#


#++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
# My_LogTouch #
#機能:    $HOMEの下のディレクトリ;引数のDirectoryName(無ければ作り);の配下に、
#       現在のタイムスタンプ名の.logをtouchする。
#具体例:
#       $MyLogTouch abc
#       $cd ~/ab
#       $cd ~/abc
#       $ ll
#       total 0
#       -rw-r--r--  1 u1  staff  0  6 14 18:22 2012-06-14-182257.log
#:
#依存: My_Date2
#
#制作:
#   1) 開始 2012-06-14  (木) 19:08 by mNeji
#
#------------------------------------------------------------------------#
My_LogTouch()
#------------------------------------------------------------------------#
{
# Usage: MyLogTouch DirectoryName
#   touch YYYY-MM-dd-hhmmss.log
#
# DirectoryName: Relative to $HOME
    #set -x
    local dn="$HOME/$1"
    #
    # Check and Make Directory $dn
    #
    if [ -d "$dn" ]
    then
        #echo "alredy exist $dn"
        :
    else
        # echo "not exist $dn"
        mkdir $dn
    ls -l $HOME | grep $1
    fi
    #
    # fileN
    #
    local fileN=`My_Date2`.log
    echo $dn/$fileN
    touch $dn/$fileN
    echo "---> touchd `ls $dn/$fileN`"
}
#
#------------------------------------------------------------------------#


#++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
#
# My_Date #
#-----------------------------------
# 表示: "2012-06-15(金)15:48:03"
#
#-------------------------
#制作:
#   1) 2012-06-15(金)15:48:03 by mNeji
#
#------------------------------------------------------------------------#
My_Date()
#------------------------------------------------------------------------#
{
    date +'%Y-%m-%d(%a)%H:%M:%S'
}
#
#------------------------------------------------------------------------#


####################################################################
# My_Date2 #
#-----------------------------------
# 機能:# Output: "YYYY-MM-DD-hhmmss"
#
#-------------------------
#制作:
#   1) 2012-06-14  (木) 19:23 by mNeji
#
#------------------------------------------------------------------------#
My_Date2()
#------------------------------------------------------------------------#
{
    date +'%Y-%m-%d-%H%M%S'
}
#
#------------------------------------------------------------------------#


#++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++#
# My_UtilsList #
#-----------------------------------
# 機能:
#       「~/myBash/MyUtilities」中の関数名だけの行をリストする。
##             関数名の定義として
##             行頭に、#,数字は無く
##             行尾に、()がついている 
#     
#------------------------
# 具体例:
#       $ MyUtilsList(ret)
#     
#

#-------------------------
#制作:
#   1) 開始 2012-06-15  (金) 00:38 by mNeji
#   2) 追加 2012-06-15  (金) 12:51 sort
#------------------------------------------------------------------------#
My_UtilsList()
#------------------------------------------------------------------------#
{
    cat $HOME/myBash/My_Utilities | grep \(\)$ | grep ^[^#] | sort
}
#
#------------------------------------------------------------------------#


#++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
#

# 次のスクリプト予定地

#++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
# Bashの立ち上げ表示スクリプト
#++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++#
# ターミナル.appが開く毎に、.bashrcから呼びさされる。
# 制作:2012-06-15(Fri)16:04:31
echo "`My_Date`  Functions are ready at 'My_Utilities';"
echo "--------------------------------------------------------------------"
echo $(My_UtilsList |sed 's/\(\)..$/, /')| sed 's/,$/./'
echo "--------------------------------------------------------------------"

#++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
#++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++#




#MyHome
#MyDate2
#MyLogFile abc
#test() grep \(\)$
#test()
#1abc()
#xyz()
なお、「.bshrc」に次の行を追加した;
# Read the MyUtiliteis directory within current shell
. myBash/MyUtilities
新しいターミナルを開き、動作の確認をした;
Last login: Fri Jun 15 16:11:40 on ttys006
2012-06-15(Fri)16:13:01  Functions are ready at 'My_Utilities';
--------------------------------------------------------------------
My_Date, My_Date2, My_Home, My_LogTouch, My_UtilsList.
--------------------------------------------------------------------
u1@div-mmX74:~ $
u1@div-mmX74:~ $ My_Date
2012-06-15(金)16:13:17
u1@div-mmX74:~ $
u1@div-mmX74:~ $
u1@div-mmX74:~ $ My_Date2
2012-06-15-161332
u1@div-mmX74:~ $
u1@div-mmX74:~ $
u1@div-mmX74:~ $ My_Home
/Users/u1
u1@div-mmX74:~ $
u1@div-mmX74:~ $
u1@div-mmX74:~ $ My_LogTouch abc
/Users/u1/abc/2012-06-15-161415.log
---> touchd /Users/u1/abc/2012-06-15-161415.log
u1@div-mmX74:~ $
u1@div-mmX74:~ $
u1@div-mmX74:~ $ My_UtilsList
My_Date()
My_Date2()
My_Home()
My_LogTouch()
My_UtilsList()
u1@div-mmX74:~ $
u1@div-mmX74:~ $
u1@div-mmX74:~ $
今後、関数群を製作する毎に、「$HOME/myBash/My_Utilities」に追加して、「$ My_UtilsList」コマンドで関数群のリストを出せる訳だ。

これらのユーティリティを使って当面の課題である「Time Machine」の手動バックアップ・スクリプトは書けそうだ。でもbashに突き進むより、zshやPythonに移行するのが善いと思えるようになってきた。

いずれにしろ正規表現は本腰をいれて練習をせねば...。


ーーーー
このポストの履歴
  1. 開始: 2012-06-15-01:22(JST)
  2. 修正: 2012-06-15  (金) 16:23



0 件のコメント:

コメントを投稿

注目の投稿

Terminalでの、なんちゃってViモドキ

近頃、ようやくKarabiner-Elementsに慣れてきたので、 Terminalで動作する「擬似Vi-Mode」を作って見たので、ご紹介します。 『概要』 「擬似Vi-Mode」の所以は、方向キー「←↓↑→」を通常の「hjkl」ではなくて「jkil」としました。これ...