码迷,mamicode.com
首页 > 系统相关 > 详细

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

时间:2014-10-20 21:09:19      阅读:320      评论:0      收藏:0      [点我收藏+]

标签: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 $num2
11 fi

 由于是第一个程序,那么就逐行解释代码;第一行中的#!告诉系统紧跟在它后面的参数是用来执行文本文件的程序。

第三行和第四行定义两个变量num1和num2 并赋值,这里要注意的是,变量名和等号之间不能后空格。因为shell脚本程序中,空格是结束符号。 第六行 为判断语句 ,test 为测试,也可以用[  ]   , -gt 相当与 > 号,(还有 lt 表示小于,ge表示>=  le表示 < =  eq 表示等于 ne表示不等于) $ 符号表示取变量的值。

if then   fi 是判断语句的结构。  echo 输出 变量值

  shell中的循环  

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

 

1 #!/bin/bash
2 
3 sum=0;
4 
5 for i in `seq 1 100`
6 do
7     sum=`expr $sum + $i`
8 done
9 echo $sum

 

shell中的函数

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

 

1 #!/bin/bash
2 
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.c
11 #       ${CC} $^ -o $@
12 #bunfly.o: bunfly.c
13 #       ${CC} $^ -o  $@
14 #hello.o: hello.c
15 #       ${CC} $^ -o $@
16 clean: 
17         ${RM}  ${OBJ} ${TARGET}

   有几个重要的知识点,1.$@表示目标文件  2.$^表示所有依赖文件 3.$< 表示第一个依赖文件。 匹配模式%.o:%.c   可以使用make clean单独使用里面的clean

Makefile还有一个时间撮的概念,就是会根据文件更改时间判断是否执行某些代码 ,还有一点,以后有automake可以自动编写Makefile 。就是说Makefile 会写些,会看就行。

  下午由于有篮球比赛,就讲了typedef 的使用 。看懂下面代码就行

bubuko.com,布布扣
 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函数,一个是用递归实现十进制转二进制。

bubuko.com,布布扣
 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
bubuko.com,布布扣
 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

标签:style   blog   http   color   io   os   ar   使用   for   

原文地址:http://www.cnblogs.com/linrong/p/4038458.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!