事前にホームディレクトリにa.txtを作成する。
[root@centos52 ~]# touch a.txt
a.txtのシンボリックリンクをaと言う名前で作成する。
[root@centos52 ~]# ln -s a.txt a
定義されている関数を表示する。
何も定義していないため、何も表示されない。
[root@centos52 ~]# declare -f
functionコマンドを使用して関数を定義します。
関数「lslink」を実行した際に、
「ls -l | grep '^l'」が実行されるように設定。
[root@centos52 ~]# function lslink() { ls -l | grep '^l'; }
定義した関数を表示する。
[root@centos52 ~]# declare -f
lslink ()
{
ls --color=tty -l | grep '^l'
}
関数の実行。先程のシンボリックリンク「a」が表示される。
[root@centos52 ~]# lslink
lrwxrwxrwx 1 root root 5 8月 30 13:15 a -> a.txt
「lslink /etc」として実行。「/etc」部分は無視されている挙動。
「lslink」として実行した時と同じく、ホームディレクトリ直下を
検索している。
[root@centos52 ~]# lslink /etc
lrwxrwxrwx 1 root root 5 8月 30 13:15 a -> a.txt
関数「lslink」の削除。
[root@centos52 ~]# unset lslink
定義した関数を表示する。問題なく削除されていることを確認。
[root@centos52 ~]# declare -f
終了。
[root@centos52 ~]# exit
今度は、引数を使用して定義します。
[root@centos52 ~]# function lslink() { ls -l $1 | grep '^l'; }
再度「lslink /etc」を実行します。
[root@centos52 ~]# lslink /etc
lrwxrwxrwx 1 root root 22 1月 7 2009 grub.conf -> ../boot/grub/grub.conf
lrwxrwxrwx 1 root root 11 1月 7 2009 init.d -> rc.d/init.d
............
今度は、引数に「/etc」が代入されたと見なされたため、
/etcのシンボリックリンクを検索できました。
aaaと言うファイルを作成します。
中身は以下の4行です。
echo $0
echo $1
echo $2
echo $#
aaaに実行権限を設定した後、実行してみます。
1番目の引数にbbbと入力しました。
[root@centos52 ta]# ./aaa bbb
./aaa
bbb
1
1行目は変数「$0」の結果として「./aaa」が表示されました。
「$0」はフルパスでシェルスクリプトファイル名を表示する変数です。
2行目は変数「$1」の結果として「bbb」が表示されました。
「$1」は1つ目の変数の内容を表示する変数です。
3行目は変数「$2」の結果として、何も表示されませんでした。
「$2」は2つ目の変数の内容を表示する変数です。
4行目は変数「$#」の結果として「1」が表示されました。
「$#」は引数の数を表示する変数です。
「$?」は戻り値を表す変数です。
色々なコマンドを実行した際に、
正常終了した場合はシェルに戻り値「0」を返します。
正常終了しなかった場合はシェルに「0以外の数字」を返します。
[root@centos52 ta]# cat aaaaaa
cat: aaaaaa: そのようなファイルやディレクトリはありません
[root@centos52 ta]# echo $?
1
[root@centos52 ta]# cat aaa
echo $0
echo $1
echo $2
echo $#
[root@centos52 ta]# echo $?
0