目录
提供了编程环境
1.程序:指令+数据
(算法+数据结构)
程序编程风格:
过程式:以指令为中心,数据服务于指令
对象式:以数据为中心,指令服务于数据
shell程序:提供了编程能力,解释执行
程序的执行方式:
计算机:运行二进制指令
编程语言:
低级:汇编
高级:
编译:高级语言-->编译器-->目标代码
C、C++, java
解释:高级语言-->解释器-->机器代码
shell, perl, python
过程式编程:
顺序执行
循环执行
选择执行
2.shell编程:过程式、解释执行
编程语言的基本结构:
数据存储:变量、数组
表达式
语句
shell,执行特性提供了基本语法控制,保留字之外,其他的语句、表达式、内部功能的实现,不是靠自己内部函数调用来实现,不像其他语言有自己的库,没有提供真正意义上的内建函数。shell依赖于当前系统环境
shell脚本是文本文件
shebang机制:执行脚本文件的解释器所在路径
#!/bin/bash
#!/usr/bin/python
#!/usr/bin/perl
必须顶格写
magic number: 魔数控制机制,内核通过魔数判断文件格式
运行脚本:
1、给予执行权限,通过具体的文件路径指定文件执行
2、直接运行解释器,将脚本作为解释器程序的参数运行
问题:shell文本在什么条件下可以运行?
①有执行权限,且在PATH的路径之一
[root@Tux tmp]# bs.sh
②有执行权限但不在PATH中
a. [root@Tux tmp]# . bs.sh
b. [root@Tux tmp]# ./bs.sh
c. bash bs.sh 手动指定解释器,把bs.sh当做解释器的参数
e.g. chmod +x one.sh(添加执行权限)
相关概念
变量:命名的内存空间
数据存储方式
字符:110:24位二进制
数值:110 --> 8位二进制
变量的数据类型
作用:
①数据存储格式
②决定能够参与的运算
③表示的数据范围
类型:
①字符
②数值:
整型 浮点型
问题:浮点型数值的细节, 是如何存储和运算
①十进制浮点数转化为二进制浮点数,e.g. 8.125->1000.001b
具体过程:除二取余法(最后被除数为0)得到整数部分的二进制数,乘二取整(直到小数部分全为0)得到小数部分的二进制数,最后得到二进制小数1000.001
②得到的二进制小数如何在计算机中存储呢?
a. 先转化成二进制的科学计数法表示1.000.001*2^3
b. 指数位是采用移位(其中左移为正,右移为负)的存储方式,因而数值为移动的位数3+127,=130,为数后零补齐
c. float由左至右分三部分存储:1符号位+8指数位+23数位
③最终表示
0 10000010 00000100000000000000000
问题:二进制浮点数转化成十进制浮点数
①由指数位大于127还是小于127判断左移还是右移
②逆向移动的到未用科学技术法表示的二进制浮点数
③Am*2^a+Bn*(1/2)^b得到十进制数
编程程序语言:
强类型:不允许跨类型操作
弱类型: e.g. bash
把所有要存储的数据统统当作字符进行
不支持浮点数;
逻辑运算:布尔型bool
true, false
1, 0
状态结果的0表示成功
与:
1 && 1 = 1
1 && 0 = 0
0 && 1 = 0
0 && 0 = 0
或:
1 || 1 = 1
1 || 0 = 1
0 || 1 = 1
0 || 0 = 0
非:
! 1 = 0
! 0 = 1
异或
短路运算:
与:
第一个为0,结果必定为0
第一个为1,第二个必须要参与运算
或:
第一个为1,结果必定为1
第一个为0,第二个必须要参与运算
练习
①写一个脚本,实现如下功能
如果user1用户存在,就显示其存在,否则添加之
显示添加的用户的id号等信息
分析:如何判断id是否存在,通过程序状态结果
重定向不影响程序状态结果
利用短路运算,&& [success] || [fail]
#!/bin/bash
id user1 &> /dev/null && echo "user1 exists." || useradd user1
id user1
②写一个脚本,完成如下功能
如果root用户登录了当前系统,就显示root用户在线;否则说明其未登录
# w | grep "^root\>" &> /dev/null && echo "root logged" || echo "root not logged"
P.S. ^root\> 保证了root在第一字段,且排除了rootxxx的情况
参考资料:
马哥随堂笔记
注:诚恳欢迎读者对本文提出批评意见,若发现存在错误,我定第一时间修改。如果读者觉得文章对您有帮助,欢迎点赞鼓励一下哟٩(๑❛ᴗ❛๑)۶。