脚本的初步了解笔记

bash脚本编程

shell编程php

 编程语言:机器语言 、汇编语言、高级语言java

 

高级语言python

静态语言:编译型语言c++

不须要借助额外的二进制程序,能够直接写代码shell

属于强类型的语言(变量)编程

事先转换成可执行格式,不须要解释器,本身就能够完成程序c#

属于静态语言的: C C++  java c#bash

问题就是容易出bug,由于是所有完成之后执行,没有校对,一旦出问题很难排查less

 

动态语言:解释型语言编程语言

弱类型的语言:

不须要直接转换有编译器 ,边解释边执行

Asp php shell python perl

 

 

Bash:脚本解释器

 

面向过程:就是分析出解决问题所须要的步骤,而后用函数把这些步骤一步一步实现,使用的时候一个一个依次调用就能够了。
面向对象:是把构成问题事务分解成各个对象,创建对象的目的不是为了完成一个步骤,而是为了描叙某个事物在整个解决问题的步骤中的行为。适合开发大型应用程序
例如五子棋面向过程的设计思路就是首先分析问题的步骤:一、开始游戏,二、黑子先走,三、绘制画面,四、判断输赢,五、轮到白子,六、绘制画面,七、判断输赢,八、返回步骤2,九、输出最后结果。把上面每一个步骤用分别的函数来实现,问题就解决了。

面向对象的设计则是从另外的思路来解决问题。整个五子棋能够分为 一、黑白双方,这两方的行为是如出一辙的,二、棋盘系统,负责绘制画面,三、规则系统,负责断定诸如犯规、输赢等。第一类对象(玩家对象)负责接受用户输入,并告知第二类对象(棋盘对象)棋子布局的变化,棋盘对象接收到了棋子的i变化就要负责在屏幕上面显示出这种变化,同时利用第三类对象(规则系统)来对棋局进行断定。

能够明显地看出,面向对象是以功能来划分问题,而不是步骤。一样是绘制棋局,这样的行为在面向过程的设计中分散在了总多步骤中,极可能出现不一样的绘制版本,由于一般设计人员会考虑到实际状况进行各类各样的简化。而面向对象的设计中,绘图只可能在棋盘对象中出现,从而保证了绘图的统一。

 

 

面向过程的语言:shell c语言

面向对象:java彻底面对对象 python  c++

                

                 变量

变量:被命名的内存空间

内存:编址的存储单元

内存在存储数据时,都会给数据编上地址方便使用时查找,虽然都是存储可是内存读取写入的的速度要比硬盘快太多了 内存做为一个短暂存储快速与cpu配合工做 而后把数据在存储在硬盘里

 

变量也是区分类型的,由于内存存储 一个字符和一个数值所用的空间彻底不同,一个字符占用7bit,可是一个字节最小是8bit  字符10就要占用16bit空间 而数值的10 二进制转换为1010 才占用4位 ,那么内存怎么用不一样的方法给予变量空间 所以产生了不一样类型的变量,以最合适的方法占用内存空间

 

变量类型:肯定数据类型的存储格式和存储长度

不一样的格式占用的内存存储空间不同

 

 变量类型常见的分为

           字符型:

            数值型:

                   整数型

                   浮点型:带小数点后面精度的 例如11.23 21.43 都是带小数的

日期时间型:最后仍是会转换为字符或者数值型来进行存储

布尔型:真、假型 又称逻辑类型

例1+1>2 判断类型结果是对仍是错 若是是对就保存为真 不过是错就保存为假,那么如何表示真假呢 那有不少方法 能够用yes和no 也能够用计算机0或1表示

 

 

 

 

 

除了算数运算还有逻辑运算

逻辑运算三种:与、或、非

“!”(逻辑非)、“&&”(逻辑与)、“||”(逻辑或)是三种逻辑运算符。
“逻辑与”至关于生活中说的“而且”,就是两个条件都同时成立的状况下“逻辑与”的运算结果才为“真”。

逻辑与:只要有一个为假,那么结果必定为假

简单来说就是 必须知足全部条件 才能执行
“逻辑或”至关于生活中的“或者”,当两个条件中有任一个条件知足,“逻辑或”的运算结果就为“真”

逻辑或:只要其中一个为真,那么结果就为真

或简单来讲 就是知足其中一个条件 一个条件就能够执行

 

逻辑非:取反

!真1=假0  取它的反向数值 若是是正确使用非之后就是错的

 

 

编译型语言,没有额外的处理逻辑,因此都是强类型

脚本型语言  可有有解释器来控制,因此能够是弱类型

Shell:弱类型编程语言

 

强类型:变量在使用前,必需要实现声明,甚至还须要初始化 通常初始化为0

0不是空

真正的空表示为null:什么都没有

变量在存数据以前,必须先告诉程序,我有变量要用,这个变量是什么类型的

 

弱类型:变量直接用不须要声明 变量用时声明,甚至不区分类型

 

变量赋值:变量名=赋予的值  赋予的值会保存在这个变量名称所对应的存储空间里

 

知识串讲

Linux内置环境变量,这样能够简化命令使用,要否则外置命令所有都以全路径操做会很是麻烦

(1)变量:变量其实就是内存,并且是进程的变量  命名的内存空间。我在内存划出一部分空间而后命名,我就能够向起名的内存空间放数据,放数据的过程就变量赋值

Name=jay 在内存中找一部分空间起名叫name而空间中放的数据叫jay  =就叫赋值,至关于一个抽屉 抽屉名字叫name 抽屉里的书叫jay

命令行中启动的脚本会继承当前shell中的环境变量

系统自行执行的脚本

 

$:引用变量${变量名} 花括号能够省略 可是若是形成名称混淆的那么必须加花括号 

例 name=s

Echo‘你 是 大 傻 $”nameb”

这样就必须加 {} 花括号 由于系统会把nameb当成一个 变量名 因此${name}b就能够显示出来了

在复习一个知识点

‘’: 强引用  不作变量替换的 echo输出什么就是什么

“”:弱引用  内部的变量会替换

 

 

特殊变量

$?:保存上一个命令的执行状态返回值

程序执行之后可能有两类返回值

1 程序执行结果

2 程序执行状态返回代码(0-255)

       0表示正确执行

       1-255 表示错误执行 一、二、127系统预留

可有这么使用 ls /var

  而后$?

若是现实0那么表示执行正确 其他1-255都表示错误

 

 

/dev/null 软件设备 又称数据黑洞 输入的任何数值都会被吞下去而且再也找不回来,相似于一个垃圾站, 若是把数据 用>> >追加在里头那么数据就会直接消失 之后会用到

 

 

set :查看当前shell中的变量

 

env:查看当前shell中的环境变量

export也能够

 

天天都在说 脚本 脚本的 那么什么是脚本?

脚本:其实就是程序的源代码,命令的堆砌,按实际需求,结合命令流程控制机制,实现的源程序

 

Bash如何实现条件测试判断?

条件测试类型:

整数测试:2是否是等于3

字符串测试:某一段所保存的数字 是否是a b c d

文件测试:判断文件是否是存在

 

条件测试的表达式,如何定义条件测试

[ 表达式 ]

注意: 表达式两边必须有空格 不然就是语法错误

 

[[ 表达式 ]]

 

test 表达式

格式 if  [ 表达式1  –eq  表达式2 ]

整数比较:

-eq 等于 equal  一口:测试两个整数是否相等 好比 [  $a  –eq  $b  ] 相等为真 不等为

 

-ne 不等于 no equal  no 一口:测试两个整数是否不等 不等为真 相等为假

 

-gt  大于 greater than 格瑞特 赞 :测试一个数是否大于另外一个数  大于为真 不然为假 有多是小于或者等于

 

-lt  小于 less than 兰斯 赞 : 测试一数是否小于另外一个数 小于为真 不然为假

 

-ge 大于或等于

 

-le  小于或等于

 

 

文件表达式
-e:测试文件是否存在,若是存在则为真


-d 目录:后面跟目录路径 测试是不是目录,则为真 


-f 文件: 后面跟上文件路径 测试文件是否为普通文件

 

-r :测试指定文件,对当前用户来说 执行脚本的用户 测试当前用户对指定文件是否有写权限

 

-x:测试指定文件,对当前用户来说 执行脚本的用户 测试当前用户对指定文件是否有执行权限

 

-w:测试指定文件,对当前用户来说 执行脚本的用户 测试当前用户对指定文件是否有写权限



 

逻辑与:&&

第一个条件为假 ,第二个条件就不用判断 ,结果就是为假

若是第一个条件为真,第二个条件必需要判断

至关于并联电路 只要有一个开关坏了 那么总体灯就不亮,因此就没必要再去判断第二个开关是否为好

 

逻辑或:||

不管第一个条件为真或者为假,都会去判断第二个条件 两个都为假结果就为假

至关于串联 第一个坏不影响电路,因此第一为假 仍是会去判断第二个条件,若是两个都为假,那么结果才为假

 

逻辑非 !

取反

若是逻辑与第一个条件为假 不存在 那么就不会去判断第二个条件了 ,因此在条件前头加上逻辑非 取反 让第一个条件伪装为真,为真逻辑与才回去判断第二个条件

 

例若是用户不存在 那么就添加用户

! id –a wuxiaolei  && userada wuxiaolei

 第一个条件 id –a 查询没有wuxiaol这个用户 那么逻辑与就不会去判断第二个条件了,因此前头加逻辑非! 让第一个条件伪装为真,第一个条件为真了那么逻辑与才回去判断第二个条件

 

变量名称命名规则:只能包含字母、数字和下划线,而且不能以数字为开头命名,不该该以系统现有的变量重名,不要习惯性的在变量后面加空格 例如w=  wc-l  加空格是不容许的

 

条件判断控制结构

1. 单分支的if 语句 

使用方法以下

 

if  条件判断 若是条件为真

then  则  执行下面的语句

执行 语句1

执行 语句2

……

fi

 

``:命令引用 这种引用的命令的执行结果,不然用得少命令的状态结果 就是0为真剩余为假的这种结果

 

 

 

 

 

 

双分支的if语句

If 指定判断条件 若是条件为真 

then      则执行

执行语句1

执行语句2

…….

else      不然执行

执行语句 3

执行语句4

……..

fi

 判断条件能够说整数比较,也能够某个状态返回值

 

 

多分支if语句

if 判断条件1 若是条件为真知足

则 then       

执行 语句1

     语句2

若是条件为假 不知足 那么

elif 那么判断

then

           语句3

           语句4    若是知足就到此为止里 ,若是还不知足就继续往下断定

elfi      那么判断

            语句5

            语句6

else  不然执行

            语句7

            语句8 

If 结束

 

 

 

 

 

 

Shell中如何进行算数运算

A=3

B=4

C=$[$A+$B]

echo  $C

7

 

 

 

 2变量生成的过程就是申请内存使用的过程

 

 

本地变量:变量名=赋予数值便可 做用域为整个bash进程均可以使用

 

局部变量 local 变量名=赋予数值  做用域为当前代码段有效

 

Bash:变量是进程的变量,一但进程结束那么变量就会消失

 

环境变量:做用域为当前shell进程以及子进程。其他的与本地变量差很少

export 变量名=赋予数值

脚本在执行时,会启动一个子shell进程

 

 

位置变量:$1 ,$2 , …….

命令的组成部分

 

命令 选项 参数 这种格式

选项:修正命令执行特性

参数:命令的做用对象

 

位置变量就能够代替参数  好比说 cat   /etc/inittab  /etc/passwd / /etc/123.txt

                               命令   参数

那么位置变量就能够代替参数

让咱们来看看实例 写个脚本 命名为d.sh

 

#!/bin/bash

#

fi [ -d $1 $2]

echo  “是目录”

else

echo   “不是目录”

fi

执行后

./d.sh  /etc/init.tab  /etc/passwd

 就会显示是否为目录

由于 $1  $2 分别代替了命令的参数选项

这种很是灵活

$1:此处代替了 /etc/init.tab 

$2:此处代替了 /etc/passwd

 

 

特殊变量

$?:执行命令状态返回值

$#: 利用echo 加$# 能够查看参数的个数

好比

./d.sh  /etc/init.tab  /etc/passwd

在脚本最上头加上

echo $#

 

那么执行完脚本

屏幕输出会出现2

就证实 有2个参数

相关文章
相关标签/搜索