bashのシェルスクリプト実行方法

bashのスクリプト実行方法と実行に関わる下記事項についてまとめました。
・スクリプトの先頭の#!/bin/bash
・実行権限
・フルパス、相対パス
・ドットコマンド、sourceコマンド

ここでは、下記サンプルスクリプトを例とします。
 
(hello.sh)
#!/bin/bash
echo hello!
 

(1)bashスクリプトの実行方法


 
1)ドットコマンドまたはsourceコマンドを使用
 
ドットコマンド、sourceコマンドを使うとファイルを読み込んで実行してくれます。
 
①ドットコマンド
$ . hello.sh
hello!
 
②sourceコマンド
$ source hello.sh
hello!
 
2)sh、bashを使って実行
 
$ sh hello.sh
hello!
$ bash hello.sh
hello!
 
3)ファイルのパスを指定して実行
 
・この場合は、実行するファイルに実行権限を付与する必要があります。
 
・$PATH環境変数にカレントディレクトリのPATHがある場合は相対パスでも実行できますが、無い場合はフルパスを指定する必要があります。
 
①実行権限がない場合の実効例
 
$ pwd .
/home/unyouser
$ ./hello.sh
-bash: ./hello.sh: Permission denied
 
※ドットはカレントディレクトリをあらわすので上記はドットを使ってフルパスを指定しています。
 
②実行権限を付与して実行
 
$ chmod 764 hello.sh
 
$ ./hello.sh
hello!
 
$ /home/unyouser/hello.sh
hello!
 

(2)スクリプトの先頭の#!/bin/bash、#!/bin/shについて


 
1)使用例
 
システムの起動に関わるシェルスクリプト”/etc/rc.d/rc.sysinit”、”/etc/rc.d/rc.local”を見てみます。
 
①/etc/rc.d/rc.sysinitの場合
#!/bin/bash
 
②/etc/rc.d/rc.localの場合
#!/bin/sh
 
2)#!/bin/bashと#!/bin/shの違い
 
下記のように/bin/shは/bin/bashへのリンクとなっているので全く同じように思えます。
 
$ ls -al /bin/sh
lrwxrwxrwx 1 root root 4 Aug 14 2013 /bin/sh -> bash
 
bashのmanを見るとこの違いについて下記記載があります。
 
If bash is invoked with the name sh, it tries to mimic the startup behavior of historical versions of sh as closely as possible, while conforming to the POSIX standard as well. When invoked as an interac-tive login shell, or a non-interactive shell with the –login option,it first attempts to read and execute commands from /etc/profile and ~/.profile, in that order. The –noprofile option may be used to inhibit this behavior. When invoked as an interactive shell with the name sh, bash looks for the variable ENV, expands its value if it is defined, and uses the expanded value as the name of a file to read and execute. Since a shell invoked as sh does not attempt to read and exe-cute commands from any other startup files, the –rcfile option has no effect. A non-interactive shell invoked with the name sh does not attempt to read any other startup files. When invoked as sh, bash enters posix mode after the startup files are read.
 
bashでは、下記のようにposixのオプションがoffになっていますが、shで実行するとonになります。
 
①bashで実行する場合
 
(スクリプトの中身)
#!/bin/bash
set -o | grep posix
(上記スクリプト実行)
$ ./hello.sh
posix off
 
②shで実行する場合
 
(スクリプトの中身)
#!/bin/sh
set -o | grep posix
(上記スクリプト実行)
$ ./hello.sh
posix on
 
(スクリプトの中身)
#!/bin/bash
set -o | grep posix
(上記スクリプトをshで実行)
$ sh hello.sh
posix on

関連記事の目次

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です