一、作业
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.o
gcc fun.o main.o -o fun
main.o:main.c
gcc -c main.c -o main.o
fun.o:fun.c
gcc -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=0
len=${#arr[*]}
for((i=0;i<len;i++))
#for i in ${arr[*]}
do
((sum+=arr[i]))
done
echo $sum
}
arr=(12 7 8 9)
ret=`fun ${arr[*]}` #如果函数体内没有return,就用命令置换符 ` `,函数体中必须要有
输出
echo $ret
法二:函数有返回值,用$?接收上条指令的返回值
#!/bin/bash
function fun(){
sum=0
len=${#arr[*]}
for((i=0;i<len;i++))
#for i in ${arr[*]}
do
((sum+=arr[i]))
done
return $sum
}
arr=(12 7 8 9)
fun ${arr[*]}
ret=$? #函数体内有return的话,就用$?来接受
#$?用于获取上条指令的返回值
echo $ret
4.分析可执行文件的生成