shellスクリプトプログラミング学習(五)入出力リダイレクトと環境変数

4028 ワード

入出力リダイレクト
入出力リダイレクトはshellでよく使用されます.例えば、1つのコマンドの出力をファイルに保存したり、パイプを介してコマンドを組み合わせて使用したりするなど、shellスクリプトはshellでより複雑な論理を実現することができるので、入出力リダイレクトメカニズムを熟練して把握する必要があります.linuxシステムでは「すべてファイル」が知られていますが、shellを開くたびに、linuxは3つのファイルを開いてプログラムに使用します.
  • stdIN(標準入力)通常はターミナルキーボード
  • stdOUT(標準出力)--通常は端末ディスプレイ
  • である.
  • stdERR(標準エラー出力)--通常も端末ディスプレイ
  • である.
    デフォルトでは、プログラムはキーボードから入力を取得して結果とエラーを画面に印刷しますが、これはプログラムが動作する唯一の方法ではありません.リダイレクトオペレータを使用して、他の入力ファイルと出力ファイルを指定してプログラムを使用することができます.
    # >      STDOUT         
    ls > out.txt 
    
    # >>      STDOUT           
    ls >> out.txt 
    
    # <      STDIN         
    grep '\.txt' < in.txt 
    
    # |      ,            ,                 
    ls | wc -l 
    
    # << delimiter          STDIN               (delimiter)
    # php         ,                  
    cat <

    linuxの「すべてがファイル」の設計のため、入出力ファイルにリダイレクトすることで、私たちのプログラムを普通のファイル、パイプファイル、ネットワークソケット、ハードウェア設備などのどこからでも入力することができて、プログラムの結果をどこに出力することができて、このようにプログラムの柔軟性を大幅に向上させました.最後に、リダイレクトオペレータのいくつかの修飾タグを出力することにも注意してください.実際にはよく使用されます.
    #          ,                。
    #                                。
    sh script.sh > /dev/null 
    
    #   STDERR         。
    #        STDIN   STDOUT     ,       STDERR     >        2      。
    sh script.sh 2> error.txt 
    
    #   >       &       STDIN   STDOUT          。
    sh script.sh &> /dev/null 
    
    #        ,   STDIN         ,   STDERR      STDIN,          。
    sh script.sh > /dev/null 2>&1 
    
    #      STDIN   STDOUT          。
    sh script.sh >out.txt 2>error.txt 

    かんきょうへんすう
    shellで直接設定した変数は、現在のshellでのみ有効です.サブshellでも変数を使用できるようにしたい場合があります.たとえば、shellスクリプトに変数を渡す場合は、exportコマンドを使用して変数をエクスポートする必要があります.サブshellでも有効な変数は環境変数とも呼ばれます.
    #    name   ,     shell     name          123
    name=123
    export name=123
    
    #       PATH               
    export PATH=$path:/home/my/shell 

    環境変数の原理は簡単で、現在のshellはexportでエクスポートされた変数を記録し、現在のshellからサブshellを開くと(例えばshellスクリプトを実行する)、サブshellにエクスポートされた変数が予め設定されていることが理解できます.これによりshellが導出した変数はそのサブshellにのみ有効であることも分かった.
    # export   1        shell   
    # test1.sh
    echo $name1
    
    # main shell
    name1=jack
    export name1
    sh test1.sh 
    #    jack
    
    
    # export   2        shell   
    # test2.sh
    name2=jack
    export name2
    
    # main shell
    sh test2.sh
    echo $name2 
    #     ,  name2        

    また、現在のshellで設定されている変数を表示するには、setコマンドを使用します.変数を削除するにはunsetコマンドを使用します.
    #      shell           
    set 
    
    #     shell     name   
    unset name