标签: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 的使用 。看懂下面代码就行
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 }
作业是复习递归的使用。两个函数,一个是用递归写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 }
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 }
第一个是看了别人的代码后写出来的,过几天再写一遍,第二个以前写过。这次写也发了些时间,不该。
标签:style blog http color io os ar 使用 for
原文地址:http://www.cnblogs.com/linrong/p/4038458.html