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

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

新規登録して質問してみよう
ただいま回答率
85.48%
Linux

Linuxは、Unixをベースにして開発されたオペレーティングシステムです。日本では「リナックス」と呼ばれています。 主にWebサーバやDNSサーバ、イントラネットなどのサーバ用OSとして利用されています。 上位500のスーパーコンピュータの90%以上はLinuxを使用しています。 携帯端末用のプラットフォームAndroidは、Linuxカーネル上に構築されています。

UNIX

UNIXとは、AT&Tのベル研究所で開発されたコンピューター用のマルチユーザー・マルチタスクのオペレーションシステム(OS)です。政府や教育機関や研究所で広範囲に採用されています。

シェル

シェル(shell)はUnix や Linux 系のOSで使用されるコマンドインタプリタを指します。

Q&A

解決済

4回答

2574閲覧

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

hkrkgyk7

総合スコア26

Linux

Linuxは、Unixをベースにして開発されたオペレーティングシステムです。日本では「リナックス」と呼ばれています。 主にWebサーバやDNSサーバ、イントラネットなどのサーバ用OSとして利用されています。 上位500のスーパーコンピュータの90%以上はLinuxを使用しています。 携帯端末用のプラットフォームAndroidは、Linuxカーネル上に構築されています。

UNIX

UNIXとは、AT&Tのベル研究所で開発されたコンピューター用のマルチユーザー・マルチタスクのオペレーションシステム(OS)です。政府や教育機関や研究所で広範囲に採用されています。

シェル

シェル(shell)はUnix や Linux 系のOSで使用されるコマンドインタプリタを指します。

0グッド

0クリップ

投稿2016/08/15 09:58

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

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

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

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

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

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

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答4

0

ベストアンサー

一般的に、シェルスクリプトは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およびバージョンでしか動作しない。

投稿2016/08/15 10:39

編集2016/08/15 10:53
raccy

総合スコア21735

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

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 14:51

take88

総合スコア1351

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

take88

2016/08/17 14:54

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

0

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

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

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

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

投稿2016/08/15 10:32

takasima20

総合スコア7458

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

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

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

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

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

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

投稿2016/08/15 10:21

flied_onion

総合スコア2604

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問