質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

88.77%

シェルスクリプトについて

解決済

回答 4

投稿

  • 評価
  • クリップ 0
  • VIEW 1,551

hkrkgyk7

score 26

シェルスクリプトについて

・シェルスクリプトは、UnixとLinuxの両方で利用することができるのでしょうか。それとも、Unix向けとLinux向けで別のシェルスクリプトが存在するのでしょうか。
(シェルスクリプトのテキストを見ていると、対応OSとしてLinuxのみ記載されてあるものもあれば、Unixのみ記載されているものもありました。そのため上記のような疑問を抱いた次第です。)

・ネットでシェルスクリプトについて調べていると、シェルスクリプトはUnixコマンドと同義という説明がありました。どういうことなのでしょうか。

  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 過去に投稿した質問と同じ内容の質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 4

checkベストアンサー

+6

一般的に、シェルスクリプトはshまたはbashで書かれており、awk、sed、grep、test等の各コマンドを組み合わせて作られています。sh、bash、awk、sed、grep、test等には多くの実装とバージョンがあります。POSIXという規格である程度統一されていますが、POSIXにはない拡張した機能を使った場合は、実装やバージョンに依存します。
※ awk、sed、grep、test等の各コマンドをUNIXコマンドと言う場合があります。ただし、Linuxだけの場面ではLinuxコマンドと言ったりしますし、UNIXだけLinuxだけと言うわけでは無いためPOSIXコマンドと言われる場合もあります。ただのコマンドというと、Windowsコマンドがありますので、それと区別するためと思われます。

多くのLinuxディストリビューションではこれらの実装はGNU版を使用しています。つまり、実装が同じである場合が多いため、拡張部分も同じになっている場合が多いと言うことです。ですので、Linuxであれば同様に動く可能性が高いです。ただし、絶対ではありません。ディストリビューションやバージョンによる違いは少なからずあるため、ディストリビューションやバージョンによっては動作しないと言うことはあり得ます。

UNIXの場合はSystem V系とBSD系に分かれています。それぞれ独自に拡張しており、また、GNU版とも異なる場合があります。そのため、GNU版の拡張を使ったコマンドが含まれていると、動作しない場合がありました。また、System V系向け、BSD系向けで互いに動作しないこともあり得ます。しかし、最近のSolarisのようにGNU版のコマンドも一緒に入れるようになってきているため、場合によってはLinux向けと言われているものでも動作する場合があります。

また、そのシェルスクリプトがOSの何かを操作するようなものですと、完全にOSやディストリビューション依存になります。例えば、何かしらのサービスを再起動するようなシェルスクリプトを考えてください。サービス再起動は、OSによって異なり、同じLinuxでもディストリビューションやバージョンによって異なります。同じCentOSでも6か7で全くコマンドが違います。同じ方法を採用していればOSが異なっても動くでしょうが、ほとんどの場合は特定のOS(ディストリビューション)とバージョンに依存してしまいます。

これまでの逆に言うと、POSIXの規格にあるコマンドやオプションのみを使った場合は、POSIXに準拠したUNIXやLinuxのどれでも動作します。つまり、両方向けに動作するということです。

以上ですが、まとめますと下記の通りです。

  • シェルスクリプトが動作するかはOS(ディストリビューション)とバージョンに依る。
  • POSIX規格のみを使用していれば、ほとんどの環境で動作する。
  • Linuxのディストリビューションは同じGNU版を採用し、ある程度の互換性があるため、Linux向け全般に動作するという場合もある。ただし、Linuxでしか動作しないというわけでは無く、コマンド等が同じGNU版の実装であればUNIXでも動作する場合がある。
  • UNIXはSystem V系とBSD系の二つがあるため、UNIX向けというより、System V系向け、BSD系向けという形になる。
  • システムを操作をするようなシェルスクリプトのほとんどは、特定のOSおよびバージョンでしか動作しない。

投稿

編集

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

0

基本的には文法はshellに依存するので、
OSより前にshellが何か。shか、bashか、zshか、cshかといった区別があります。

加えてOSによってディレクトリ構成やパッケージシステムなどがありますので、
OS X用、Linux用、UNIX用などと別れる場合があります。Linuxでもディストリビューションまで指定されている場合もあります。

まとめると、動かすshellが同じであれば基本的には動くが、OSの機能・環境に依存するような内容のスクリプトであればそのOSでなければ動かない。
というところでしょうか。
スクリプト内でその差を吸収するように書いている場合もあります。

ネットでシェルスクリプトについて調べていると、シェルスクリプトはUnixコマンドと同義という説明がありました。どういうことなのでしょうか。

わかりません。スクリプトとコマンドが同義ということはないでしょうね。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

0

シェルスクリプトは、UnixとLinuxの両方で利用することができるのでしょうか

おおむね使えると思っていいと思います。
ただし、拡張機能的なものを使っていたりすると互換はないですし、
「シェル」にどういうものを使うかによっても違いますね。
そういう意味では GNU or 商用UNIXってイメージがあるかなあ。

シェルスクリプトはUnixコマンドと同義という説明があり

率直に読めば「そんなわけはない」のですが、
同等の使い方ができるという意味ではそうなのかもね~

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

0

シェルスクリプトは、UnixとLinuxの両方で利用することができるのでしょうか。

Unixにも、Linuxにもシェルスクリプトはありますので質問の答えはYesとなります。
ただし、Unix用に作ったシェルスクリプトが Linux でも同様に動くことは保証されません。
理由は Unix用に作ってあるからです。作者がLinuxでも動くように作っていれば Linuxでも動きます。
Unix用にもかかわらず、偶然Linuxでも動くということもありえます。(シンプルなスクリプトほど動く可能性は高いです)

シェルスクリプトはUnixコマンドと同義という説明がありました。どういうことなのでしょうか。

通常 Unixコマンドは 手で入力して実行すると思いますが、その時入力したコマンドをファイルに保存すれば、それがシェルスクリプトになるからです。

例えば コマンドを実行した結果が次のようになったとします。

$ ls *.txt
 aaa.txt  bbb.txt  ccc.txt   ←ファイルが3つ表示

次に手入力したコマンド(ls *.txt)をファイルに保存して 保存したファイルを実行してみます。

$ echo 'ls *.txt' > script.sh     ←シェルスクリプトを作成
$ cat script.sh                   ←シェルスクリプトの中身を表示
ls *.txt                          ←中身は手入力した時と同じコマンドが書かれてる
$ sh ./script.sh                  ←シェルスクリプトを実行
 aaa.txt  bbb.txt  ccc.txt        ←手入力した時と同じ結果になった

実行結果は、シェルスクリプトを実行した場合と、コマンドを手で入力した場合とで全く同じです。
このように、手入力するコマンドと、スクリプトに書かれるコマンドは同じものである
という意味で「シェルスクリプトはUnixコマンドと同義」と説明されたのだと推測します。


余談

上の例ではシェルスクリプトを実行する時に sh ./script.sh と書きましたが これは「『sh』というシェルプログラムで『script.sh』を実行せよ」という意味です。

シェルプログラムは複数種類があります。bash csh tsch zsh ksh etc...
実行するシェルプログラム毎に コマンドの文法が変わります。

ですので「基本的」には 「sh」用に書かれたスクリプトは他のシェルプログラムで実行してはいけません。例えば「bash」用に書かれたスクリプトを「csh」で動かすとエラーになります。

シェルスクリプトを作成する場合は、ファイルの先頭に「#!/bin/sh」のように#!の後に実行するプログラムをフルパスで書くのが慣習となっています。また、このようにすると 実行時にシェルプログラム名を省略する事ができるメリットもあります。

例)

$ cat script.sh  ←ファイルを表示
#!/bin/sh          ←一行目に実行するプログラムのフルパスを記述
ls *.txt
$ chmod +x script.sh   ←シェルスクリプトに実行権限を付与
$ ./script.sh             ←実行(「sh」を省略できる)
 aaa.txt  bbb.txt  ccc.txt

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2016/08/17 23:54

    わかりやすく書くことにチャレンジしてみましたが、量が多くなって分かりにくいかもしれませんね…。

    キャンセル

15分調べてもわからないことは、teratailで質問しよう!

  • ただいまの回答率 88.77%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

同じタグがついた質問を見る