一编程语言
编程语言 | |||
---|---|---|---|
面向过程 | c | 面向对象 | c++ |
编译型语言 | c\c++ | 解释性语言 | shell脚本\python 需要解析器 |
二shell脚本
2.1操作系统的结构
应用层:app\代码 应用层通过shell解析器完成和内核层的交互
---------------------------------------
内核层:
内核的五大功能:
1、设备管理
2、网络管理
3、内存管理
4、文件管理
5、进程管理
---------------------------------------
硬件层:外部设备
1.2第一个shell脚本
C文件后缀是.c,C++是.cpp,shell脚本是.sh
#!/bin/bash
echo hello world
#输出一行hello world
shell中#表示注释
#!----->shabang /she-bang
作用:指明脚本使用的解析器,如果不写系统会自动推导,只要写了就一定要写对
ubuntu使用的python解析器:/usr/bin/python
1.3执行脚本的三种形式
执行shell脚本三种形式 | |
---|---|
bash(常用) | bash 文件名.sh |
执行过程:在后台打开一个终端,处理脚本,把结果返回到当前终端 | |
source | source 文件名.sh |
执行过程:在当前终端执行,结果也在当前终端返回 | |
修改文件的权限,可以直接运行 | chmod 777 脚本名 |
./脚本名.sh |
三、修改环境变量
3.1查看系统的特殊的环境变量
env
3.2修改PATH环境变量
查看原有的PATH路径:echo $PATH
export PATH = $PATH :添加的路径
| | | | |
对变量赋值 要赋值的变量 赋值运算符 展开原有的PATH路径 路径分割
只对当前用户生效
修改当前用户的配置文件
sudo vim ~/.bashrc ----->打开文件后,使用export表达式添加新的路径
让配置文件生效:
重启(永久生效)
source ~/.bashrc (source和.是同一个指令,都是只能临时生效)
. ~/.bashrc
对所有用户都生效(常用)
修改/etc/bash.bashrc文件
sudo vim /etc/bash.bashrc
让配置文件生效:
- 重启(永久生效)
- source /etc/bash.bashrc (source和.是同一个指令,都是只能临时生效)
- ./etc/bash.bashrc
对所有用户生效
修改配置文件/etc/environment
以冒号作为分隔,添加自己的PATH路径
让配置文件生效:
- 重启(永久生效)
- source /etc/environment (source和.是同一个指令,都是只能临时生效)
- ./etc/environment ----->.是shell一个内置指令
四、shell中的变量
在shell脚本中,没有数据类型的概念,全部当作字符串处理
4.1复习
C语言中定义变量
存储类型 数据类型 变量名;
存储类型:6种
数据类型:基本数据类型 构造数据类型
4.2定义
指令的格式
指令 参数 操作数
变量名=变量的值
变量名='变量的值' ---->用于变量的值中间有空格
变量名="变量的值" ---->用于使用已有变量给新的变量赋值,并且使用有空格字符串拼接时
''内,$变量名 不会被展开
""内,$变量名 会展开
变量的注意事项:
- =两侧一定不能加空格
- 如果使用有空格的字符串给变量赋值,需要加单引号
- 如果使用已有变量给新的变量赋值,需要使用${},使用双引号,展开变量
4.3使用变量的值
$变量名
${变量名}:{}用于区分变量的范围
4.4修饰变量的关键字
unset:清空变量的值,但是,不能清空readonly变量的值
readonly:只读,值不能修改
local:定义局部变量,只能在函数中使用
练习:
1、写一个1.sh脚本,将以下内容放到脚本中:
在家目录下创建目录文件,dir
在dir下创建dir1和dir2
把当前目录下的所有文件拷贝到dir1中,
把当前目录下的所有脚本文件拷贝到dir2中
把dir2打包并压缩为dir2.tar.xz
再把dir2.tar.xz移动到dir1中
解压dir1中的压缩包
使用tree工具,查看dir下的文件
#!/bin/bash
mkdir ~/dir/dir1 ~/dir/dir2 -p
cp * ~/dir/dir1
cp *.sh ~/dir/dir2
tar -cvJf ~/dir/dir2.tar.xz ~/dir/dir2
mv ~/dir/dir2.tar.xz ~/dir/dir1
tar -xvf ~/dir/dir1/dir2.tar.xz
tree ~/dir
4.5外部传参/位置变量
$0 ---->脚本名
$1 ---->第一个参数
$2 ---->第二个参数
····
$n ---->第n个参数
9以上需要加{},${n}
获取外部参数的个数:$# ---->不包含脚本名
获取所有的外部参数:$*/$@ ----->不包含脚本名
练习:
1、写一个脚本,输出脚本的所有外部参数,及第11个参数
echo $*
echo ${11}
4.6输出
echo 字符串/$变量名 ------>会自动换行
echo默认不解析转义字符
echo -e 可以解析转义字符
echo -n 取消换行
指令的格式:
指令 参数 操作数 ---->标准格式中参数要求在操作数之前
但是随着解析器的更新有些指令也支持:
指令 操作数 参数
c语言复习
段错误
1访问野指针
2数组越界,可能段错误
3指针赋值为字符常量, 因为字符在静态区的RO段
4