シェルスクリプトについて
・シェルスクリプトは、UnixとLinuxの両方で利用することができるのでしょうか。それとも、Unix向けとLinux向けで別のシェルスクリプトが存在するのでしょうか。
(シェルスクリプトのテキストを見ていると、対応OSとしてLinuxのみ記載されてあるものもあれば、Unixのみ記載されているものもありました。そのため上記のような疑問を抱いた次第です。)
・ネットでシェルスクリプトについて調べていると、シェルスクリプトはUnixコマンドと同義という説明がありました。どういうことなのでしょうか。
気になる質問をクリップする
クリップした質問は、後からいつでもMYページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
回答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総合スコア21733
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
総合スコア1347
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
0
シェルスクリプトは、UnixとLinuxの両方で利用することができるのでしょうか
おおむね使えると思っていいと思います。
ただし、拡張機能的なものを使っていたりすると互換はないですし、
「シェル」にどういうものを使うかによっても違いますね。
そういう意味では GNU or 商用UNIXってイメージがあるかなあ。
シェルスクリプトはUnixコマンドと同義という説明があり
率直に読めば「そんなわけはない」のですが、
同等の使い方ができるという意味ではそうなのかもね~
投稿2016/08/15 10:32
総合スコア7458
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
0
基本的には文法はshellに依存するので、
OSより前にshellが何か。shか、bashか、zshか、cshかといった区別があります。
加えてOSによってディレクトリ構成やパッケージシステムなどがありますので、
OS X用、Linux用、UNIX用などと別れる場合があります。Linuxでもディストリビューションまで指定されている場合もあります。
まとめると、動かすshellが同じであれば基本的には動くが、OSの機能・環境に依存するような内容のスクリプトであればそのOSでなければ動かない。
というところでしょうか。
スクリプト内でその差を吸収するように書いている場合もあります。
ネットでシェルスクリプトについて調べていると、シェルスクリプトはUnixコマンドと同義という説明がありました。どういうことなのでしょうか。
わかりません。スクリプトとコマンドが同義ということはないでしょうね。
投稿2016/08/15 10:21
総合スコア2604
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
あなたの回答
tips
太字
斜体
打ち消し線
見出し
引用テキストの挿入
コードの挿入
リンクの挿入
リストの挿入
番号リストの挿入
表の挿入
水平線の挿入
プレビュー
質問の解決につながる回答をしましょう。 サンプルコードなど、より具体的な説明があると質問者の理解の助けになります。 また、読む側のことを考えた、分かりやすい文章を心がけましょう。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。