shellとMakefile

9157 ワード

一、shell基礎
1.shell紹介
  • shellは、オペレーティングシステムの端末コマンドライン
  • である.
  • 意味:迅速に複数をコンパイルする.cファイル
  • shellはプログラミング言語
  • です.
  • 常用shell言語:sh、bash、csh、ksh、perl、python
  • shellスクリプトの実行メカニズム:解釈実行
  • 2.shell運転方法
  • 第1種:./xx.shは、バイナリ実行可能プログラムを実行する方法と同じです.このようにshellを実行するにはshellプログラムに実行可能な権限が必要です.chmod a+x xx.shを使用して実行可能な権限を追加します.
  • 第2種:source xx.sh,sourceはlinuxのコマンドであり,このコマンドはスクリプトプログラムを実行するために使用される.これにより、スクリプトに実行可能な権限を持つ必要はありません.
  • 第3種:bash xx.sh,bashはスクリプトプログラム解釈器であり,本質は実行可能プログラムである.このように実行することはbashプログラムを実行し、xxを実行することに相当する.shはargv[1]として彼に渡されて動作する.
  • 1 #!bin/sh
    2 echo "hello world"
  • #!/bin/shこの話は#!最初にpathnameを追加します.shellプログラムの実行時にどの解釈器によって実行されるかを指定することを意味します.
  • dashはubuntuでデフォルトで使用されるスクリプト解釈器です.
  • #先頭の行は注釈行
  • です.
    3.shellプログラミング学習
    3.1入出力
    1 strinjg="ni hao"
    2 echo $strinjg
    3 echo 'hello"world'
  • shellに値を割り当てる=両側にスペースはありません.
  • shellで参照する変数は$記号を使用する必要があります.$記号は変数解参照記号です.
  • 変数参照の場合は$varでもよいし、${var}でもよい.この2つの違いは、場合によっては${var}しか使用できず、単純な$var
  • は使用できないことです.
    1 Echo ‘hello”world’----- hello”world
    2 Echo “hello\”world”----- hello”world
    3 Echo ‘hello\”world’----- hello”world
  • shellで使用する文字列は、二重引用符を付けずに直接使用できます.また、スペースがある場合でも構いませんが、欠陥は出力できません」または他のエスケープ文字です.
  • 引用符中:完全字面置換(引用符自体を含まない)
  • 1 #!bin/sh
    2 #   
    3 #p=`pwd`
    4 #echo $p
  • 反引用符で囲まれて実行されます.shellでlinuxコマンドを呼び出すのは、このコマンドの戻り値
  • を得るためである場合があります.
    3.2.ifの典型的な応用
     1 #        ,        
     2 #if [ -f a.txt ];then
     3 #    echo "yes"
     4 #else
     5 #    echo "no"
     6 #    touch a.txt
     7 #fi
     8 
     9 #         
    10 #if [ "abc" = "afc" ];then
    11 #    echo "equal"
    12 #else
    13 #    echo "not wqual"
    14 #fi
    15 
    16 #        
    17 #if [ 12 -eq 12 ];then
    18 #    echo "equal"
    19 #else
    20 #    echo "not wqual"
    21 #fi
  • ファイルが存在するかどうかを判断します.(-f)、注意[]の前後にスペースがあり、省略できません.[ -f a.txt ]
  • ディレクトリが存在するか否か判断(-d)
  • 文字列が等しいかどうかを判断します(「str 1」=「str 2」)、2つの
  • ではなく1つの等号で注意してください.
  • は、数字が等しいか否か(-eq)、大きいか否か(-gt)、小さいか(-lt)、大きいか否か(-ge)、小さいか否か(-le)
  • を判断する.
  • 文字列が空(-z)であるか否かを判断する
  • 1 #-o     
    2 #if [ 112 -eq 12 -o "aabc" = "abc" ];then
    3 #    echo "yes"
    4 #else
    5 #    echo "no"
    6 #fi
  • はC言語においてifの後の条件式において2つの式を論理的に、論理的に、または接続することに相当し、最終的なifにおいて成立するかどうかは2つの式の論理演算結果に依存する.

  • 3.3.shellの循環構造
    1 #!bin/sh
    2 #for  
    3 for i in `ls`
    4 do
    5     echo $i
    6 done

    3.4追加ファイル
  • shellでは、echoコマンドを直接使用してファイルを新規作成し、一部のコンテンツをこのファイルに転送することができます.ファイルを作成し、内容を入力する鍵は>です.
  • は、echoコマンドを使用して追加記号>>既存のファイルの末尾に入力内容を追加することもできます.

  • 3.5.shellの他の注目すべき知識点
    3.5.1 case文
  • breakは、
  • からループジャンプするためにのみ使用される.
  • $#は、shellが呼び出されたときのパラメータの個数
  • を表す.
    1 #case    
    2 #var=1
    3 #1) echo "1" ;;
    4 #2) echo "2" ;;
    5 #esac
    6 
    7 #  shell  
    8 #echo $# $0 $1 $2 $3

    二、Makefile基礎回顧
    1.Makefileの役割と意味
  • Makefileプロジェクト管理
  • make xxxのプロセスは、コマンドを使用して依存をターゲットに加工するプロセスです.

  • 2.いくつかのコマンド
  • %はMakefileのワイルドカード
  • です.
  • ダミーターゲット:単純にこのターゲットの次のコマンドを実行するために、使用する.PHONYは、偽のターゲットであることを明確に宣言します
  • Makefileのコメント用#
  • @はサイレント実行
  • を示す.
  • =最も簡単な賦値---->前だけを見るのではなく、後を見る
  • :=一般的にも付与------>前を見るだけで
  • ?=変数の前に値が割り当てられていない場合、この値が実行され、前に値が割り当てられている場合、ローは無視されます.
  • +=割り当てられた変数に
  • を割り当てるために使用される.
    3.コマンド補完2
  • *任意の文字数
  • ?任意の1文字
  • []は[]の文字を順次外の結合と一致させる
  • $@ルールのターゲットファイル名
  • ドル、最初のファイル名
  • $^依存ファイルセット