Linux操作系统知识点(下)

【19】Shell脚本—解释型语言
Shell脚本语言是解释型语言
Shell脚本的本质:
Shell命令的有序集合

【20】shell 编程的基本过程
基本过程分为三步:
Step1. 建立 shell 文件
包含任意多行操作系统命令或shell命令的文本文件;
Step2. 赋予shell文件执行权限
用chmod命令修改权限;
chmod 774 .sh
Step3. 执行shell文件
直接在命令行上调用shell程序.
./
.sh
或者
bash *.sh

【21】Shell变量
Shell允许用户建立变量存储数据,但不支持数据类型(整型、字符、浮点型),
将任何赋给变量的值都解释为一串字符
变量=一串字符或者变量
注意:在变量赋值的时候一定不能加空格
Bourne Shell有如下四种变量:
1. 用户自定义变量
2. 位置变量即 命令行参数
3. 预定义变量
4. 环境变量
set 查看所有的变量,包括环境变量,
env 查看环境变量

【22】用户自定义变量
定义变量并赋值
变量=value
输出变量的值 echo
echo 字符串
如果表引号,表示一个整体,如果不加引号,如果用空格隔开,则当做多个字符串
-n 不换行
-e 支持转换字符
\n 换行
\t 制表符
特殊字符:
$ 取变量的内容
# 注释一行
``或者 ( ) 命 令 置 换 , 将 命 令 的 结 果 赋 值 给 一 个 变 量 ′ ′ 单 引 号 内 的 特 殊 符 号 失 去 特 殊 意 义 " " 双 引 号 内 的 特 殊 符 号 失 去 特 殊 意 义 , 除 了 () 命令置换,将命令的结果赋值给一个变量 '' 单引号内的特殊符号失去特殊意义 "" 双引号内的特殊符号失去特殊意义,除了 ()"" \ `
\ 特殊符号失去特殊意义,比如$,原本$去变脸的内容就无效了
注释的方式
注释一行
# …
注释多行
:<<! … !
if false; then … fi

【23】位置变量
$0 与键入的命令行一样,包含脚本文件名
$1,$2,……$9 分别包含第一个到第九个命令行参数
$# 包含命令行参数的个数
$@ 包含所有命令行参数:“$1,$2,……$9”
$? 包含前一个命令的退出状态
$* 包含所有命令行参数:“$1,$2,……$9”
$$ 包含正在执行进程的ID号

【24】shell 程序和语句
shell 程序由零或多条shell语句构成。 shell语句包括三类:说明性语句、功能性语句和结构性语句。
说明性语句:
以#号开始到该行结束,不被解释执行
功能性语句:
任意的shell命令、用户程序或其它shell程序。
结构性语句:
条件测试语句、多路分支语句、循环语句、循环控制语句等。
功能性语句:
1 – read 从终端读取数据
read 变量
read从标准输入读入一行, 并赋值给后面的变量,
其语法为: read var
把读入的数据全部赋给var
read var1 var2 var3
把读入行中的第一个单词(word)赋给var1,
第二个单词赋给var2, ……把其余所有的词赋给最后一个变量
选项:
-p 显示提示信息
-t 在规定的时间(秒数)内输入,如果时间到达时还没有输入,
则不会给任何一个变量赋值
-n 规定输入的字符数,如果字符数足够,则立即赋值
-s 将输入的内容隐藏起来
2 – expr 执行基本算术运算
算术运算命令expr主要用于进行简单的整数运算,
包括加(+)、减(-)、乘(*)、整除(/)和求模(%)等操作。
例子:
A=expr 10 + 20
使用其他方式计算
let
eg:let C= A + A+ A+B
(())
eg: C= ( ( (( ((A + B ) ) [ ] e g : C = B)) [] eg: C= B))[]egC=[$A / $B]
3 – test 执行关系运算符和逻辑运算符
> >= < <= == !=
! && ||
test语句可测试三种对象:
字符串 整数 文件属性
1 – 字符串测试
s1 = s2 测试两个字符串的内容是否完全一样
s1 != s2 测试两个字符串的内容是否有差异
-z s1 测试s1 字符串的长度是否为0
-n s1 测试s1 字符串的长度是否不为0
2 – 整数测试:
a -eq b 测试a 与b 是否相等
a -ne b 测试a 与b 是否不相等
a -gt b 测试a 是否大于b
a -ge b 测试a 是否大于等于b
a -lt b 测试a 是否小于b
a -le b 测试a 是否小于等于b
3 – 文件属性
按照文件类型
-e 文件是否存在
-s 文件是否非空
-b 是否是块设备文件
-c 是否是字符设备文件
-d 是否是目录文件
-f 是否是普通文件
-L 是否是链接文件
-S 是否是套接字文件
-p 是否是管道文件
按照文件权限
-r 文件是否可读
-w 文件是否可写
-x 文件是否可执行
两个文件之间的比较
文件1 -nt 文件2 1比2新
文件1 -ot 文件2 1比2旧
文件1 -ef 文件2 二者是否inode节点一样(可以用来判断是否是硬链接)
4 – 多重判断
-a 逻辑与
10 <= a <= 20
–>a >= 10 && a <= 20
–>a - e 10 -a a -le 20
–>[ a -ge 10 ] && [ a -le 20 ]
-o 逻辑或
a < 0 || a > 100
–> a -lt 0 -o a -gt 100
! 逻辑非
! -d file
awk sed

【25】控制语句
结构性语句主要根据程序的运行状态、输入数据、变
量的取值、控制信号以及运行时间等因素来控制程序的运
行流程。
主要包括:条件测试语句(两路分支)、多路分支语
句、循环语句、循环控制语句和后台执行语句等。
1 – 条件测试语句
基本形式
if…then…fi
if [ 表达式 ]
then

fi
一般形式
if…then…else…fi
if [ 表达式 ]
then

else

fi
阶梯形式
if…then…elif…then…else…fi
if [ 表达式1 ]
then
命令表1
elif [ 表达式2 ]
then
命令表2

else
命令表n
fi
2 – 多路分支语句语句
case…esac
case 变量 in
模式1)
命令表1
;;
模式2)
命令表2
;;
模式3)
命令表3
;;

*)
命令表n
esac
3 – 循环语句之for循环
for …do…done
for 变量 in 单词表
do
命令表
done
4 – 循环语句之while循环
while 表达式
do
命令表
done
5 – 循环语句之until循环
until 表达式
do
命令表
done
while循环是如果表达式为真,则执行命令表,直到循环为假,则循环结束
until循环是如果表达式为假,则执行命令表,直到循环为真,则循环结束

【26】函数
函数变量作用域
全局作用域:在脚本的其他任何地方都能够访问该变量。
局部作用域:只能在声明变量的作用域内访问。
声明局部变量的格式:
Local variable_name =value

【27】GNU工具
编译工具:把一个源程序编译为一个可执行程序
调试工具:能对执行程序进行源码或汇编级调试
软件工程工具:用于协助多人开发或大型软件项目的管理,如make

【28】gcc简介
全称为GNU CC ,GNU项目中符合ANSI C标准的编译系统

【29】gcc编译过程
1— 预处理:主要进行宏替换以及头文件的包含展开
gcc -E HelloWorld.c -o HelloWorld.i
2— 编译:编译生成汇编文件,会检查语法是否有错误
gcc -S HelloWorld.i -o HelloWorld.s
3— 汇编:将汇编文件编译生成目标文件(二进制文件)
gcc -c HelloWorld.s -o HelloWorld.o
4— 链接:链接库函数,生成可执行文件
gcc HelloWorld.o -o HelloWorld
gcc *.c --> a.out
gcc *.c -o xxx --> xxx
gcc -c *.c -o *.o
gcc *.o -o xxx

【30】Gdb调试
首先使用gcc对file.c进行编译,注意一定要加上选项‘-g’
gcc -g *.c
gdb ./a.out
查看文件(list)
(gdb) l
一次十行,知道显示完为止
l 1 回到先前的位置
设置断点 (break)
(gdb) b 行数
删除断点 (delete)
del 1删除第一个断点
查看断点情况
(gdb) info b
运行代码 (run)
(gdb) r
查看变量值(print) 也可以查看变量的地址 p &a
(gdb) p n
单步运行 (next step)
(gdb) n
(gdb) s 进入函数
恢复程序运行 (continue)
(gdb) c
帮助
(gdb) help [command]
退出
q
gdb使用时注意事项
在gcc编译选项中一定要加入‘-g’。
只有在代码处于“运行”或“暂停”状态时才能查看变量值。
设置断点后程序在指定行之前停止
运行被调试程序,设置所有的能影响该程序的参数和变量。
保证被调试程序在指定的条件下停止运行。
当被调试程序停止时,让开发工程师检查发生了什么。
根据每次调试器的提示信息来做响应的改变,以便修正某个错误引起的问题

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值