首页 > 代码库 > 第十天:shell编程基础与编写Makefile

第十天:shell编程基础与编写Makefile

一: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 $@ 8 %.o: %.c 9         ${CC} $^ -o $@10 #main.o: main.c11 #       ${CC} $^ -o $@12 #bunfly.o: bunfly.c13 #       ${CC} $^ -o  $@14 #hello.o: hello.c15 #       ${CC} $^ -o $@16 clean: 17         ${RM}  ${OBJ} ${TARGET}

   有几个重要的知识点,1.$@表示目标文件  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