#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)