#navi(../)
* 一つのシェルスクリプトで複数のコマンドを作成する方法 [#wc159de0]
一つのシェルスクリプトファイルで複数のコマンドを作成する方法を以下に記します。~
実現方法は、basenameコマンドとシンボリックリンクを使用して実現します。~
以下に1つのシェルスクリプトで複数コマンドを作成し実行してみます。

#contents
#htmlinsertpcsp(linux_ads_top.html,linux-sp.html)

* 関連記事 [#p986bd0e]
-[[ディレクトリ文字列を削除しファイル名のみを抽出する方法・basename>逆引きUNIXコマンド/ディレクトリ文字列を削除しファイル名のみを抽出する方法]]
-[[シンボリックリンクの実体のパスを取得する>逆引きUNIXコマンド/シンボリックリンクの実体のパスを取得する]]

* 複数のコマンドを実現するサンプルシェルスクリプト [#tefecf34]
以下に1つのシェルスクリプトで複数のコマンドを実現するシェルスクリプトと手順および実行結果を記します。

** サンプルスクリプト [#h46af8b5]
以下の記すように、シェルスクリプト内に複数のfunctionを作成します。
#ref(funcs.zip)
 #!/bin/bash
 
 #------------------------------
 # hello
 #------------------------------
 function hello {
  echo "hello"
 }
 #------------------------------
 # konnichiwa
 #------------------------------
 function konnichiwa {
   echo "konnichiwa"
 }
 #------------------------------
 # bye
 #------------------------------
 function bye {
   echo "bye"
 }
 #------------------------------
 # sayonara
 #------------------------------
  function sayonara {
   echo "sayonara"
 }
 
 cmd=$(basename $0)
 case $cmd in
   "hello")
     hello;;
   "konnichiwa")
     konnichiwa;;
   "bye")
     bye;;
   "sayonara")
     sayonara;;
   *)
     exit 0
 esac

** シンボリックリンクをfunction名で張る [#oc083fab]
上記のfuncs.shに実行権限を与え、function名でシンボリックリンクを張ります。
+ funcs.shファイルが存在するか確認しましmた。
 sakura@ubuntu:~$ ls -l
 合計 4
 -rwxrwxr-x 1 sakura sakura 613  9月 10 23:32 funcs.sh
#br
+ chmodコマンドでfuncs.shに実行権限を与えます。
 chmod +x funcs.sh
#br
+ シンボリックリンクをfunction名で張ります
ln -s funcs.sh hello
 ln -s funcs.sh konnichiwa
 ln -s funcs.sh bye
 ln -s funcs.sh sayonara
#br
+ 以下のようになります。
 sakura@ubuntu:~$ ls -l
 合計 4
 lrwxrwxrwx 1 sakura sakura   8  9月 10 23:41 bye -> funcs.sh
 -rwxrwxr-x 1 sakura sakura 613  9月 10 23:32 funcs.sh
 lrwxrwxrwx 1 sakura sakura   8  9月 10 23:41 hello -> funcs.sh
 lrwxrwxrwx 1 sakura sakura   8  9月 10 23:41 konnichiwa -> funcs.sh
 lrwxrwxrwx 1 sakura sakura   8  9月 10 23:41 sayonara -> funcs.sh

** 実際に実行してみます [#of7e5df4]
 sakura@ubuntu:~$ ./hello
 hello
 sakura@ubuntu:~$ ./konnichiwa
 konnichiwa
 sakura@ubuntu:~$ ./bye
 bye
 sakura@ubuntu:~$ ./sayonara
 sayonara

コマンド名=functionで動作していることが確認できました。

仕組みは簡単で、$0はファイル名になります。~
basenameでディレクトリを除き、ファイル名だけにします。~
ファイル名=functionになるようになっているので、~
シンボリックリンクされたファイル名=functionとなり動作します。

以上、一つのシェルスクリプトのファイルで複数のコマンドを実現する実装方法でした。

#htmlinsertpcsp(linux_ads_btm.html,linux-sp.html)

トップ   編集 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS