第十天:shell編程基礎與編寫Makefile

來源:互聯網
上載者:User

標籤:style   blog   http   color   io   os   ar   使用   for   

一:shell編程基礎

    shell定義:shell是一個作為使用者與linux系統間介面的程式。它允許使用者向作業系統輸入需要執行的命令.shell有很多中,linux系統中shell為bash。

    shell編程可以看作是一堆命令的集合。和windows中的bat程式類似的指令碼程式。為解釋性語言。

    第一個shell程式是判斷兩個數位大小。  

 1 #!/bin/bash 2  3 num1=10 4 num2=9 5  6 if test $num1  -gt  $num2  7 then  8     echo $num1 9 else 10     echo $num211 fi

 由於是第一個程式,那麼就逐行解釋代碼;第一行中的#!告訴系統緊跟在它後面的參數是用來執行文字檔的程式。

第三行和第四行定義兩個變數num1和num2 並賦值,這裡要注意的是,變數名和等號之間不能後空格。因為shell指令碼程式中,空格是結束符號。 第六行 為判斷語句 ,test 為測試,也可以用[  ]   , -gt 相當與 > 號,(還有 lt 表示小於,ge表示>=  le表示 < =  eq 表示等於 ne表示不等於) $ 符號表示取變數的值。

if then   fi 是判斷語句的結構。  echo 輸出 變數值

  shell中的迴圈  

1 #!/bin/bash2 3 for((i=0;i<=10;i++))4 #for i in 1 2 3 45 do 6     echo "hello world $i"7 done

 

1 #!/bin/bash2 3 sum=0;4 5 for i in `seq 1 100`6 do7     sum=`expr $sum + $i`8 done9 echo $sum

 

shell中的函數

1 #!/bin/bash2 3 hello()4 {5     echo "hello world `date`"6 7 8 }9 hello

 

1 #!/bin/bash2 3 function add {4     echo $[$1 + $2] 5 }6 result=`add 10 20`7 echo  "result is $result"

   $1 $2 表示函數的參數 。還是要主要空格的使用。上面代碼中add 和{  之間有空格。寫的時候沒有注意,找了好久。

  目前所需要的shell知識就是看懂上述經典的shell就可以了。

     老劉今天只是大概說了下shell ,主要是引出Makefile的編寫。老劉編寫了三個函數,main.c bunfly.c hello. c  main函數中有使用到bunfly.c和hello.c中定義的函數。Makefile 函數從簡單到複雜,不斷的用變數來代替原先的值,這個過程我沒有儲存,所以只貼最後的代碼:

 1 CC=gcc -c 2 LD=gcc 3 RM=rm -rf 4 TARGET=test 5 OBJ=main.o bunfly.o hello.o 6 ${TARGET}:${OBJ} 7         ${LD} $^ -o [email protected] 8 %.o: %.c 9         ${CC} $^ -o [email protected]10 #main.o: main.c11 #       ${CC} $^ -o [email protected]12 #bunfly.o: bunfly.c13 #       ${CC} $^ -o  [email protected]14 #hello.o: hello.c15 #       ${CC} $^ -o [email protected]16 clean: 17         ${RM}  ${OBJ} ${TARGET}

   有幾個重要的知識點,[email protected]表示目標檔案  2.$^表示所有依賴檔案 3.$< 表示第一個依賴檔案。 匹配模式%.o:%.c   可以使用make clean單獨使用裡面的clean

Makefile還有一個時間撮的概念,就是會根據檔案更改時間判斷是否執行某些代碼 ,還有一點,以後有automake可以自動編寫Makefile 。就是說Makefile 會寫些,會看就行。

  下午由於有籃球比賽,就講了typedef 的使用 。看懂下面代碼就行

 1 #include<stdio.h> 2  3 typedef int int32; 4 typedef int (*pf)(int32 ,int32); 5  6 int32 ave(int32 a,int32 b )     7 { 8     return ( a + b) / 2 ; 9 10 }11 int32 call(pf p,int32 a,int32 b )12 {13     return     p(a,b);14 15 }16 int main()17 {18     int32 n = ave(10,20);19     printf("%d\n",n);20 21     pf p = ave;22     printf("%d\n",p(10,20));  23 24     printf("%d\n",call(p,10,20));25     26 }
typedef

 作業是複習遞迴的使用。兩個函數,一個是用遞迴寫atoi函數,一個是用遞迴實現十進位轉二進位。

 1 #include<stdio.h> 2  3 int n = 0; 4  5 int myatoi(char *p) 6 { 7      8     n = n*10 + (*p - 48 ); 9     if(*(p+1) == ‘\0‘)10         return;11     myatoi(++p);    12     return n;13          14 }15 int main()16 {    17     char arr[10] = {"2312345"};18         n = myatoi(arr);19     printf("%d\n",n);20 }
遞迴atoi
 1 #include<stdio.h> 2 int dtox(int n) 3 { 4     if(n / 2 ==0) 5     { 6         printf("%d",n % 2); 7         return ; 8     } 9     dtox(n/2);10     printf("%d",n % 2);11 12 }13 int main()14 {15     int n = 10;16     dtox(n);17 }
遞迴轉換進位

第一個是看了別人的代碼後寫出來的,過幾天再寫一遍,第二個以前寫過。這次寫也發了些時間,不該。

 

 

 

 

 

第十天:shell編程基礎與編寫Makefile

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.