#/GDB(hello.c的源文件已被创建)
被调试的应用程序在编译时最好使用-g参数将调试信息编入
gcc hello.c -o hello -g
(-o hello 必须前后不变但位置可变:gcc -g hello.c -o hello)
#(gdb)list 10 --l:表示列出10行源码。
#(gdb)run --r:从头运行。
#(gdb)quit --q:退出。
#(gdb)break --b:设置断点。eg: break 16 (程序第16行设置断点)
#(gdb)continue --c:从停止处继续运行程序。
#(gdb)next --n:向前执行一句。(不进入被调用函数中)
#(gdb)step --s:向前执行一句。(可进入被调用函数中)
#(gdb)return --ret:从当前函数返回。
#(gdb)print --p:显示变量或者表达式的值。
#(gdb)x :显示内存值。
#(gdb)backtrace --bt:显示调用栈。
#(gdb)info b :显示所有断点。
#(gdb)delete b :删除断点
连续敲击回车键则会一直执行最近执行过的命令。
#/**shell:命令解析器
(脚本语言用来执行命令)
eg:vim hello.sh(.sh不是后缀,只为甄别使用)
#!/bin/bash(必须为绝对路径)(bash相当于是一个解析器,所以脚本语言不需要编译)
#echo(输出)hello /"hello"(“”会更加灵活)
#echo hello > test.txt(">"重定向覆盖符号,会创建一个text.txt文件,会覆盖掉文件内的内容。">>"重定向追加。就不会覆盖。)
eg:Hello="helloworld"
echo ${Hello} / echo $Hello
#eg:命令行参数
echo $0:输出./xxxxxx.sh
echo $1:输出第1个参数
echo $2:输出第2个参数
echo $#:输出参数的个数
echo $*:输出所有的参数
echo $?:程序的返回值判断
注:shell里注释用"#"开头
eg:shell中的循环表示
t1:
for((i=0;i<5;i++));//分号可以省略
do
echo "helloworld"
done
t2:
for i in {1..10}
do
echo "helloworld"
done
t3:
for i in a, b, c, d
do
echo $i
done
t4:
for name in $1 $2 $3
do
mkdir $name
cd $name
echo > ${name}.c "
#include<stdio.h>
int main()
{
printf(\" \\n\");
return 0
} "
cd ..
done
t5
PATH=$1
if [ -z ${PATH} ]; then //判断参数是否为空,如果不为空则不成立,为空则成立
echo "输入有误"
exit 1
fi
if [ -d ${PATH} ]; then //判断是否为目录
echo "是目录。"
fi
if [ -f ${PATH} ]; then //判断是否为文件
echo "是文件。"
fi
可以合并为:
if [ -d ${PATH} ]; then
echo "是个目录"
elif [ -f ${PATH} ]; then
echo "是个文件"
fi
#/case语句:
echo "请输入一个字符:"
read key //从键盘读取一个字符存在变量key里。
case "$key" in
[A-Z] ) echo "大写字母";;
[a-z] ) echo "小写字母";;
[0-9] ) echo "数字";;
* ) echo "其他";;
esac
(#注:在外命令行中可能需要更改环境变量:export LANG=C)
#echo $PATH:输入完后会出现很多的路径,将一个列如:tt的名称放入任何一个在PATH路径下即可完成将 tt 变成如" cd "一样的命令(都是二进制文件)。
#echo PATH:$PATH /home
#eg:
unset PATH:就会中止这个环境变量。