• ベストアンサー

linuxの位置パラメータについて

linuxの位置パラメータ、IFS、setコマンドがよくわかりません。 どなたか詳しく説明していただけないでしょうか。

質問者が選んだベストアンサー

  • ベストアンサー
  • freetaka
  • ベストアンサー率53% (106/197)
回答No.1

午前に引き続きお邪魔します linuxでは位置パラメータとして $0 から $9 まで使用できる変数が用意されています $0 には実行したコマンドやシェルスクリプト等が格納されます $1 から $9 は引数として9個まで順番に指定できます $* ですべての引数を表します $# で引数の数がわかります たとえば名前が echo.sh というシェルスクリプトがあるとして 内容が以下だった場合 #!/bin/bash echo "実行したスクリプト名 : $0" echo "引数に指定されたのは : $1 $2 $3 $4 $5 $6 $7 $8 $9" シェルスクリプトを実行する時に 引数として abc def ghi jkl を指定したとする こんな感じ ./echo.sh abc def ghi jkl すると結果は以下のようになると思います 実行したスクリプト名 : ./echo.sh 引数に指定されたのは : abc def ghi jkl これはスクリプト内で関数に対して引数を与えた場合も 同じような扱いです #!/bin/bash hyouji(){ echo "実行したスクリプト名 : $0" echo "引数にしてされたのは : $1 $2 $3 $4 $5 $6 $7 $8 $9" } hyouji abc def ghi jkl 結果は同じものになりますが スクリプト実行時に与えた引数とは別に スクリプト内でも位置パラメータが使えるので 混同しないように注意が必要です こらだけではないですが基本はこんなところです IFSはデリミタ(区切り文字)のことで linuxではデフォルトが空白だったりします なのでcsvのようなカンマ区切りに対応したい場合は IFSをカンマに変更します setコマンドはシェル変数の内容を表示したり 設定する場合に使います しかし使い方を詳しく説明するとかなり長くなるので 簡単に説明すると shやbashの場合は変数を設定する場合に str=aaa のようにsetコマンドを使いませんが cshでは set str=aaa のようにsetコマンドを使うという違いがあります これは自分が使用しているシェルに依存する部分で スクリプトを作成する場合に記述内容に違いがでます その他にIFSに基づいて位置パラメータに文字列を展開するとか 便利な使い方があるので載せておきます set -- 位置パラメータに展開する文字列または変数 ↑setの後のハイフンは2個連続 または set -- だけの場合は位置パラメータの内容を すべてunset(消す)することができます という使い方で たとえば #!/bin/bash set -- "aaa bbb ccc" echo $1 echo $2 echo $3 という内容だと実行した場合に aaa bbb ccc という結果になります これにIFSをカンマに変更したとすると csv形式に対応することができたりします #!/bin/bash #変数を設定 str="aaa,bbb,ccc" #IFSのバックアップと変更 IFS_BAK=$IFS IFS="," set -- $str echo $1 echo $2 echo $3 #IFSをもとにもどす IFS=$IFS_BAK 実行するとデリミタがカンマ区切りとなり 結果は同じものになります 内容としては少し薄いですが 参考までに・・・

shiro857
質問者

補足

回答ありがとうございます。 とても丁寧でわかりやすい説明でした。 また機会があれば宜しくお願いします。

関連するQ&A

  • LINUXでパラメータの説明をするコマンドってなん

    LINUXでパラメータの説明をするコマンドってなんでしたっけ? help

  • LinuxにLHAという圧縮コマンドがありますが、パラメータがわかりません。

    大昔にDOSでLHA arxnmwh:\ 作成ファイル 対象ディレクトリ で良く使っていましたので体で覚えていました。 最近Linuxを使うようになって、lhaコマンドでパラメータがわからなくなりました。変更でもあるのでしょうか? わりたいことは、あるディレクトリ以下のファイルとディレクトリを経過表示なしで、圧縮かけたいのと、 展開の際のパラメータです。 よろしくお願いします。

  • Linuxのカーネルパラメータについて

    Linux(RedHatLinux/CentOSを想定)で,カーネルパラメータの一覧を見るにはsysctl -aですが, そのカーネルパラメータそれぞれが何を意味するかを示した,ドキュメント or Webページ or 書籍 etc.はありませんでしょうか? 本質問の背景ですが,RHEL6など比較的最近リリースされたOSバージョンにて 新しく作られたカーネルパラメータの意味を調べたいです. インターネット上ではあまりドキュメントは見つからなかったので,最悪ソースコード等を追うつもりですが,もっと簡単に調べられる方法がありましたらご教授ください.

  • linuxコマンド?

    コマンドでtcpdumpとtcpdprivについてです。 これらのコマンドはそれぞれどういう機能を持っているのでしょうか? 特にtcpdprivについてがよく分かりません。 できたら、linux初心者なので分かりやすい説明をお願いします。

  • ${parameter:-word} と ${parameter:=word} の違い

    bashのパラメータ展開で ${parameter:-word} と ${parameter:=word} の違いが何なのかよく分らないのですが、何が違うのでしょうか? http://www.linux.or.jp/JM/html/GNU_bash/man1/bash.1.html

  • パラメータ

    Cmd.commandtext="select * from stb where id =?" コマンドテキスト以外でパラメータを使用することが できますか?

  • Linuxを使えるようになるには・・・

    Linux超初心者です。 Linuxを使えるようになるには、やはり解説書を片手に格闘しないと使いこなせるようにはなれませんか? Windowsのように使ってるうちに慣れてくるというような類いのOSじゃないという気がしますが、どうでしょうか? Linuxではコマンドを多用する場面が多いようですが、コマンドは覚えるもの=ある程度のコマンドは覚える必要があるのか、それともコマンドには何か規則性があって必要最小限の規則性さえ覚えれば大丈夫(使える)なのか、どちらでしょうか? ある程度、Linuxをマスター出来る早道・基本があれば、ぜひ教えて下さい。 よろしく御願いします。

  •  Linuxコマンドについて色々

     こんにちは。 Linuxコマンドの重要性がいまいち分からないのでLinuxコマンドについてどのような 物なのか幅広く教えていただければ助かります。 LinuxコマンドというのはOSがLinuxである場合に使うんですよね? それとLinux関係の資格でLPICというものがあるんですがそういったものは どういった場合に役立つのでしょうか?

  • attrib パラメータが有効になりませんと出ます。

    昨日、突然OSごと落ちました・・・ Windows2000 のメディアを再度入れなおし 回復しようとしています。 attrib コマンドで属性の変更を行おうとしたが パラメータが有効になりませんと出ます。 C:\> attrib を実行しても パラメータが有効になりませんと出ます。 どのようにしたらよいでしょうか。 どなたか教えて下さい。

  • linux初心者です

    Windows、MacなどOSを扱ってきてlinuxにチャレンジしようと思い、空きのノートPCにlinuxを入れてみました。 そこで、ノートPCの無線LANを有効にする設定の仕方が分かりません。調べていくとコマンドを入れれば無線LANが動くそうですが、どこでコマンドを入力すればいいのでしょうか? 調べていてもコマンドを入力する場所を知っていること前提で説明されているので。 それとログイン画面を自動ログインにする方法はあるのでしょうか?