<参考書引用>
シェルスクリプトscript-args.bashを「./script-args.bash a b c」として実行したとき
#!/bin/bash
echo $1 $2
とあり、
その場合返答は『./script-args.bash a b』
とあるのですが、いったいなにがしたいのかもわかりません。
シェルスクリプトをまたそのまま
./script-args.bash a b c
と書いて実行してなにがしたいのでしょうか。
そもそも、./script-args.bashというのはコマンドなのですか?
気になる質問をクリップする
クリップした質問は、後からいつでもMYページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
回答3件
0
ドットは現在のディレクトリ(フォルダのことです)を表します。
./script-args.bash
ということは、このディレクトリにあるscript-args.bashというファイルを実行せよという指示です。
script-args.bashは自分で作る必要があります。
呼び出し時にa b cとついてるのは、a b cという3つの文字をそのプログラムに渡しています。
渡された文字をどう使うかは自由ですが、$番号で参照できます。echoで出力するだけなら、別に渡した意味はないので、それで混乱されてるのだと思いますが、サンプルなので深い意味はありません。
ちなみにargsというのは、Argumentsの略で、引数という意味です。プログラムに外部から渡す値のことを引数(ひきすう)と言います。
次に#!/bin/bashですが、これは「このファイルをルートフォルダのbinに入っているbashプログラムに渡してください」というOSへの指示です。
windowsは拡張子でプログラムを判断上し、.rbならルビー、.pyならパイソンとなりますが、Linuxはファイルの中にそれを開くプログラムを指定する仕組みになってます。
投稿2016/02/13 23:38
編集2016/02/13 23:57総合スコア686
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2016/02/14 06:21
2016/02/14 09:58
0
シェルスクリプト
Bash
1#!/bin/bash 2echo $1 $2
を、./script-args.bash a b c
と実行した場合の出力結果は、a b
です。
その場合返答は『./script-args.bash a b』とあるのですが、
の「返答」というのが出力結果という意味であれば、それは間違っています。
もしくは、もとのスクリプトが、
Bash
1#!/bin/bash 2echo $0 $1 $2
であったのなら、出力結果は./script-args.bash a b
です。
と書いて実行してなにがしたいのでしょうか。
読んでいる物が、ちゃんとした入門書とかであるなら、あなたの読み違いがどこかにあります。
もしくは、いい加減に書かれたウェブサイトを見ているのか。
そもそも、./script-args.bashというのはコマンドなのですか?
はい。コマンドです。
投稿2016/02/13 23:39
総合スコア84499
0
ベストアンサー
bash スクリプトにおいてコマンドライン引数にどのようにアクセスするか、という例だと思います。$1
とか $2
とか、ってことですが。
bash
1#!/bin/bash 2person=$1 3foods=$2 4echo "${person} likes ${foods}."
とかやって使います。
で、最初の #!/bin/bash
の部分(shebang と呼ばれます)は、このファイルをどのインタプリタで実行するか、というのを指定するものです。
通常は、sh ./s.sh
とシェルを明示的に起動して、その引数にスクリプトファイルを渡すわけですが、スクリプトファイルに shebang があって、なおかつ、実行属性がつけられていれば、スクリプトファイルを実行しようとすると、shebang で指定した処理系でそのスクリプトが実行されます。
以下、例です。
[takeyuki@localhost ~]$ sh ./s.sh takeshi apples takeshi likes apples. [takeyuki@localhost ~]$ ./s.sh takeshi apples bash: ./s.sh: 許可がありません [takeyuki@localhost ~]$ chmod +x s.sh [takeyuki@localhost ~]$ ./s.sh takeshi apples takeshi likes apples.
追記1
他の方の回答を見て、ひとつ、いや二つ、思い出しました。
コマンド、とは何か、というのは自明ではないように思いますが、名前で呼びだして実行可能なプログラム、という感じでしょうか。
まあ、そういう定義だとすると、コマンドにはその実体が何かによっていくつかあります。
(1) シェルの組み込み関数(ビルトインコマンド): シェルの機能として提供しているシェル内部にコードが書いてあるコマンド:例 bash の echo (外部コマンドの echo もある)
[takeyuki@localhost ~]$ echo test test [takeyuki@localhost ~]$ type echo echo はシェル組み込み関数です
(2) 外部コマンド:ファイルとして存在するプログラム。実行ファイル形式のものもあれば、shebang 付きのスクリプトファイルのこともある。
[takeyuki@localhost ~]$ date 2016年 2月 14日 日曜日 09:13:16 JST [takeyuki@localhost ~]$ type date date はハッシュされています (/usr/bin/date) [takeyuki@localhost ~]$ file `which date` /usr/bin/date: ELF 64-bit LSB executable, x86-64, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.32, BuildID[sha1]=05e827b15d6bebd4fd4ddb6c3878f1f498cdc486, stripped [takeyuki@localhost ~]$ echo -e '#!/bin/bash\ndate' > date && chmod +x date [takeyuki@localhost ~]$ ./date 2016年 2月 14日 日曜日 09:18:51 JST [takeyuki@localhost ~]$ file date date: Bourne-Again shell script, ASCII text executable
上の例で date
で呼び出しているのが実行形式ファイルのもの、./date
で呼び出しているのがカレントディレクトリにあるスクリプトです。
(3) エイリアス:よく使うコマンドを短く呼べるようにしたり、いつもつけるコマンドラインオプションをまとめたりして、シェルに登録しておくもの
[takeyuki@localhost ~]$ alias myls='ls -alt' [takeyuki@localhost ~]$ myls .emacs.d 合計 8 drwx------. 11 takeyuki warriors 4096 2月 14 09:18 .. drwx------. 2 takeyuki warriors 4096 2月 13 15:07 auto-save-list drwxr-xr-x. 4 takeyuki warriors 47 2月 12 11:48 elpa drwx------. 4 takeyuki warriors 38 2月 12 11:48 . [takeyuki@localhost ~]$ type myls myls は `ls -alt' のエイリアスです [takeyuki@localhost ~]$ type ls ls は `ls --color=auto' のエイリアスです
(4) ユーザ定義関数:シェルに登録しておく、ユーザが定義した関数
[takeyuki@localhost ~]$ myfunc(){ ls -lt $1 | head -3; } [takeyuki@localhost ~]$ myfunc /var/log 合計 3316 -rw-------. 1 root root 1529001 2月 14 09:21 messages -rw-------. 1 root root 58849 2月 14 09:01 cron [takeyuki@localhost ~]$ type myfunc myfunc は関数です myfunc () { ls --color=auto -lt $1 | head -3 }
(1), (3), (4) は、実体としてはシェルの内部にあります。シェルの外のファイルシステム上にあるのは (2) ですが、このとき、明示的にパスを指定しなかった場合にはシェルの環境変数 PATH
に列挙されたディレクトリの中を探します。
./script-args.bash
と、先頭に ./
をつける必要があるのも、明示的にファイルの存在する場所を指定するためです。自分でよく使うスクリプトを /home/takeyuki/bin
にまとめておき、これを PATH
に含めておく、なんてこともやったりします。このようにしておいた上で先の script-args.bash
を /home/takeyuki/bin
においておけば、script-args.bash
とするだけで起動できます。
投稿2016/02/13 20:12
編集2016/02/14 00:35総合スコア2468
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2016/02/14 00:46
2016/02/14 04:31
2016/02/14 05:15
2016/02/14 06:37
2016/02/14 07:09
あなたの回答
tips
太字
斜体
打ち消し線
見出し
引用テキストの挿入
コードの挿入
リンクの挿入
リストの挿入
番号リストの挿入
表の挿入
水平線の挿入
プレビュー
質問の解決につながる回答をしましょう。 サンプルコードなど、より具体的な説明があると質問者の理解の助けになります。 また、読む側のことを考えた、分かりやすい文章を心がけましょう。