一、作业
1.写一个函数,输出当前用户的uid和gid,并使用变量接收结果
#!/bin/bash
function fun(){ret=`id -u`ret1=`id -g`echo $ret $ret1
}
ret=`fun`
echo $ret
二、练习回顾
1.分文件编译(实现冒泡排序)
正确的:将数组的长度定义在主函数中(main.c)
错误的:将len放入功能函数中去计算(fun.c)
2.makefile
2.1 第一版
fun:fun.o main.ogcc fun.o main.o -o fun
main.o:main.cgcc -c main.c -o main.o
fun.o:fun.cgcc -c fun.c -o fun.o
clean:rm *.o fun
2.2 第二版
EXE=fun
OBJS+=main.o
OBJS+=fun.o
CC=gcc
CFLAGs=-c$(EXE):$(OBJS)$(CC) $(OBJS) -o $(EXE)
fun.o:fun.c$(CC) $(CFLAGs) fun.c -o fun.o
main.o:main.c$(CC) $(CFLAGs) main.c -o main.o
clean:rm *.o fun
2.3 第三版
EXE=fun
OBJs+=main.o
OBJs+=fun.o
CC=gcc
CFLAGs=-c$(EXE):$(OBJs)$(CC) $^ -o $@
%.o:%.c$(CC) $(CFLAGs) $^ -o $@
clean:rm *.o fun
引入自动变量和通配符 ------>针对一条规则而言
$@:所有目标
$^:所有依赖
$<:第一个依赖
3.shell中函数参数获取
3.1通过位置变量的方式获取
#!/bin/bash
function sum(){num=$(($1+$2))return $num
}
a=90
b=3
sum a b
echo $num
3.2接收函数结果
法一:函数没有返回值,但有输出,可以使用命令置换符接收函数的结果赋值给变量
#!/bin/bash
function fun(){sum=0len=${#arr[*]}for((i=0;i<len;i++))#for i in ${arr[*]}do((sum+=arr[i]))doneecho $sum}
arr=(12 7 8 9)
ret=`fun ${arr[*]}` #如果函数体内没有return,就用命令置换符 ` `,函数体中必须要有 输出
echo $ret
法二:函数有返回值,用$?接收上条指令的返回值
#!/bin/bash
function fun(){sum=0len=${#arr[*]}for((i=0;i<len;i++))#for i in ${arr[*]}do((sum+=arr[i]))donereturn $sum
}
arr=(12 7 8 9)
fun ${arr[*]}
ret=$? #函数体内有return的话,就用$?来接受#$?用于获取上条指令的返回值
echo $ret
4.分析可执行文件的生成