bash的基础特性(3)

目录

提供了编程环境

1.程序:指令+数据

2.shell编程:过程式、解释执行

练习

参考资料

提供了编程环境

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的情况

参考资料:

马哥随堂笔记

注:诚恳欢迎读者对本文提出批评意见,若发现存在错误,我定第一时间修改。如果读者觉得文章对您有帮助,欢迎点赞鼓励一下哟٩(๑❛ᴗ❛๑)۶。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值