標籤: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