スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

Linuxにおけるシェルスクリプトの書き方

スクリプトの作成と実行

コンソールを起動([アプリケーション]→[アクセサリ]→[端末])し、

$ gedit hello.sh

で「hello.sh」というファイル名のテキストファイルを作成し、以下のように編集します。

echo "hello!"

これを保存してgeditを終了します。実行は、shコマンドで行います:

$ sh hello.sh
hello!

shコマンドなしでスクリプトを実行する

まず、再度

$ gedit hello.sh

でhello.shを開き、一行目に「#!/bin/sh」を書きます:

#!/bin/sh
echo "hello!";

「#!」のあとにshコマンドのフルパスを書くことで、システムにシェルスクリプトとして認識されます。「#!」はシェバング(Shebang)と呼ばれています。また、「#!/bin/sh」が書かれた一行目のことをシェバング行(Shebang line)といいます。

編集できたら、保存してgeditを終了します。

次に、ファイルの属性を変更して実行権限を与えます:

$ chmod 755 hello.sh

すると、shコマンドなしでスクリプトが実行できるようになります:

$ ./hello.sh
hello!

/bin/shの実体

実は、/bin/shはシンボリックリンクです。その実体(参照先)が、Linuxディストリビューションごとに微妙に異なります。例えば、CentOSの場合、

$ ls -l /bin/sh
lrwxrwxrwx 1 root root 4  4月  2  2009 /bin/sh -> bash

Ubuntuの場合、

$ ls -l /bin/sh
lrwxrwxrwx 1 root root 4 2008-05-10 15:00 /bin/sh -> dash

ただし、Ubuntuのデフォルトのログインシェルはbashです。

bash(Bourne-Again Shell)とdash(Debian Almquist Shell)は、どちらもUnixにおいて古くから使われているBシェル(Bourne Shell)との互換性はあるものの、両者の違いのせいで、CentOSでは動作したスクリプトがUbuntuでは動作しない(あるいはその逆)といったトラブルが起こりえます。

対処方法としては、以下のものが考えられます:

  • シェバング行はそのままで、Bシェルの範囲でスクリプトを書く
  • シェバング行を「#!/bin/bash」(もしくは「#!/bin/dash」)とする
  • /bin/shの参照先を変更する

3番目の方法について、例えばUbuntuでは、

$ sudo ln -sf bash /bin/sh

によって「/bin/sh」の参照先が変更できます。あるいは、

$ sudo dpkg-reconfigure dash

を実行して「/bin/sh」の参照先を設定しなおすという方法もあります。

【theme : Linux
【genre : コンピュータ

プロフィール

よしいず

Author:よしいず
MATHEMATICS.PDFというウェブサイトを運営しています。

管理の都合上、トラックバックとコメントはオフにしてあります。ブログ経験者なら分かっていただけると思いますが、スパム(アダルトやその他の宣伝)ばかりなのが現実です。

リンクは自由です。当サイトの記事に対する間違いの指摘・意見・感想などを述べた記事からのリンクは歓迎です。ただし、ブログ記事アップ直後はミスが多く、頻繁に修正します。場合によっては削除する可能性もあります。その際、何も断りもなく修正・削除しますがご了承ください。内容を参考にする場合には投稿後一週間ほど様子を見てからにしてください(笑)。

記事の間違いを指摘するときは、その具体的箇所、理由(仕様に反するなど)・根拠(参考にした文献など)、代替案(同じ結果を得るための正しいやり方)も教えてください。そうしないと、(指摘される側および第三者はその時点では無知の状態なので、)どこが間違いなのか分かりませんし、本当に間違っているのかどうかが判断・検証できません。実際、間違いだと指摘されたことが結局は正しかったというケースもありますので。

このブログのタイトル一覧

リンク
月別アーカイブ
カテゴリ
最新記事
検索フォーム
RSSリンクの表示
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。