
Ubuntu日本語フォーラム

ログインしていません。
こんにちは、シェルスクリプトを使って任意のコマンドを実行したいのですがどうやって端末にコマンドを渡せばいいかわかりません。
このフォーラムを調べて見ましたが見つからず、もし僕が探せてないだけでこのようなことがすでにあったら教えてください
mkdir data
cd data
例えば端末ではこのように打てばdataフォルダを作成してそのフォルダに移動しますが、シェルスクリプトでこのコマンドを実行するにはどのように書けばいいでしょうか?
シェルスクリプトについて調べるとwhileなどのプログラミングで使うコマンドばかりヒットして目的のページが探せませんでした。
よろしくお願いします
オフライン
端末で入力したコマンドは、シェルというプログラム (インタープリター) が解釈・実行します。
シェルにもいろいろな種類がありますが、Ubuntu では bash (dash かもしれない) がそれです。
このプログラムは /bin フォルダーに保存されているのでフルパスでは /bin/bash (または /bin/dash) です。
ubuntu ではこのようなシェルとして /bin/sh が標準で提供されています (厳密には違うけど、最初はこんな意識でいいと思う)。
以上を踏まえた上で、以下の Web ページを読むと少しは理解できるかもしれません。
「#!/bin/sh は ただのコメントじゃないよ! Shebangだよ! - Qiita」
オフライン
radio01 による投稿:
こんにちは、シェルスクリプトを使って任意のコマンドを実行したいのですがどうやって端末にコマンドを渡せばいいかわかりません。
このフォーラムを調べて見ましたが見つからず、もし僕が探せてないだけでこのようなことがすでにあったら教えてください
mkdir data
cd data
例えば端末ではこのように打てばdataフォルダを作成してそのフォルダに移動しますが、シェルスクリプトでこのコマンドを実行するにはどのように書けばいいでしょうか?
シェルスクリプトについて調べるとwhileなどのプログラミングで使うコマンドばかりヒットして目的のページが探せませんでした。
よろしくお願いします
基本的すぎて、ネットなどには書かれることが少ないのかもしれません。
シェルスクリプト というのは、言葉通り、シェルを呼び出し実行する、テキストファイルです。
コマンドとなる例を作成してみます。
まず、下記のテキストを、gedit などで作成し、mkdir.sh とでもして、カレントディレクトリに保存します。
(拡張子 .sh には、MS-Windowsなどと違い、意味はありません。単に、人が、シェルスクリプトであると判別できるようにする目印みたいなものです)
#!/bin/sh mkdir data cd data echo "test" > test.txt
次に、作成したファイルを実行できるようにするために、実行権を付けます。
端末を開き、下記コマンドを実行します。
chmod +x mkdir.sh
(実行権を取るには、chmod -x mkdir.sh とします)
Linux を含め、Unix系のコマンドファイル(テキストファイルであれ、バイナリファイルであれ)には、この実行権がついていないとないといけません。
実行権の有無の確認は
ls -l mkdir.sh とします。
$ ls -l mkdir.sh -rwxr-xr-x 1 si si 54 11月 20 19:03 mkdir.sh 表示の意味 x -> 実行権 w -> 書き込み権 r -> 読み込み権 右から3文字単位で r-x -> 他者(other)は、読み出しと実行ができる r-x -> 所有者と同じグループ内の者も、読み出しと実行ができる rwx -> ファイル所有者は読み書き(変更)と実行ができる si si は、ファイルの所有者とグループ名
実際に、実行してみます。
./mkdir.sh
( ./ は、カレントディレクトリを意味します。Linux(Unix)では、カレントディレクトリは、コマンド検索の対象にはなりません)
結果を確認します。
ls data
cat data/test.txt
**** シェルスクリプトの解説
1行目 呼び出すシェルの記述
#!/bin/sh --> bash が必要であれば、 #!/bin/bash とします。
以降は、コマンド行の列挙になります。
#! は、シェルとか、インタプリタを呼び出すための定型句です。
#!/usr/bin/python とすれば、python スクリプトを実行できますし
#!/usr/bin/ruby とすれば、ruby スクリプトを実行できます.
オフライン
ryさん、shebangの大切さがわかりましたありがとうございます!
こういったところからwindowsとは違うんですね。
siさん、まさしくこれを知りたかったです!
シェルスクリプトでは端末と違う書き方をしなければいけないと思っていて調べてもsendやexpextなどの記述例しか無く、それを使ってもうまくいくはず無くて困ってました。
試しに書いて実行するとうまく行きました!
いろいろshファイルを書いてみます。
これからもubuntuを勉強して行きます、お二人とも、本当にありがとうございました!
オフライン