1.Makefile
功能:make命令运行时需要Makefile文件,告诉make命令需怎样编译和链接程序。
内容:具体规则,隐含规则,定义变量,指令,注释。
基本格式:target(目标):dependency(依赖)
(tab键)command(命令)
例:hello:hello.c
gcc hello.o -o hello
伪目标: .PHONY
2.GDB调试工具
被调试的应用程序在编译时最好使用-g参数将调试信息编入目标文件中:
gcc -g 文件.c -o 文件
启动调试: gdb 文件
若程序调试时需要参数: gdb --args arg1 arg2 (arg1,arg2视为程序的参数)
命令 | 简写 | 功能 |
list | l | 列出源码 |
break | b | 设置断点 |
run | r | 从头开始运行程序 |
continue | c | 从停止除继续运行程序 |
next | n | 向前执行一句(不进入被调用函数中) |
step | s | 向前执行一句(可进入被调用函数中) |
return | ret | 从当前函数返回 |
p | 显示变量或表达式的值 | |
x | x | 显示内存值 |
backtrace | bt | 显示调用栈 |
quit | q | 退出gdb |
symbol-file | sy | 从可执行文件中加载符号表 |
3.Shell使用基础
开头格式:#!/bin/bash
脚本后缀.sh
执行脚本前需先将脚本改为可执行:chmod 数字代号 文件
然后执行脚本:./文件
或直接执行脚本:sh 文件
echo " " 输出
echo " " >x 创建x文件并输出到x(覆盖)
echo " " >>x 创建x文件并输出到x(添加)
echo $* 输出全部参数
echo $# 输出了n个参数
echo $n 输出第n个参数
一些参数:
-f 存在且是普通文件
-d 存在且是目录
-s 存在且字节数大于0
-r 存在且可读
-w 存在且可写
-x 存在且可执行
=: 等于则为真
!=:不相等则为真
-z字符串:字符串长度为零则为真
-n字符串:字符串长度不为零则为真
-lt 小于
-le小于等于
-gt 大于
-ge 大于等于
-eq 等于
-ne 不等于
if语句:
构造:if [ ] ;
then
else
fi
例:测试目录shell和文件123是否存在
#!/bin/bash
DIR="/home/shell"
FILE="/home/123"
if [ -d ${DIR} ] ;
then echo "exist"
fi
if [ -f ${FILE} ] ;
then echo "unexist"
fi
case语句:
构造:case "$#" in
0) echo "输入了0个参数";;
1) echo "输入了1个参数";;
*) echo "输入了多个参数";;
esac
例:输入一个参数,若在A-Z,a-z,1-9之间则分别发出不同的信号
#!/bin/bash
read key
case ${key} in
[A-Z] ) echo "UpperLetter"
[a-z] ) echo "LowerLetter"
[1-9] ) echo "Number"
* ) echo "Unkown"
esac
for语句:
构造:for variable_name in <list_of_values>
do
...
done
例:输入三个参数,分别创建以三个参数命名的文件夹并在对应文件夹里创建.txt文件
#!/bin/bash
for dir in $1 $2 $3
do
mkdir ${dir}
cd ${dir}
touch ${dir}.txt
echo "hello ${dir}">${dir}.txt
cd ..
done
while语句:
构造:while <条件>
do
<命令(s)>
done
例:求1-100的和
#!/bin/bash
i=1
sum=0
while [ $i -le 100 ]
do
sum=$[$sum+$i]
i=$[$i+1]
done
echo $sum