shell的编程原理

编程原理:
1、编程介绍
驱动 硬件默认是不能使用的
CPU控制硬件、不同的厂家硬件设备之间需要进行指令沟通,我们需要驱动程序来进行“翻译”;
更趋近与开发的工程师,要学习“汇编语言”;而“汇编语言”被厂商所限制;
C C++的底层就是汇编语言
现在编程:
基于高级语言,以及超高级语言,更好的让程序员能够的实现编程功能
编程语言的分类:
高级语言
超高级语言需要翻译成计算机可读的语言(二进制指令)
解释型--逐行翻译执行,shell python java
bash -x filename.sh
编译型---一次编译,全部执行C语言 C++ C# java
程序=指令+数据
面向对象---侧重数据的编程语言
面向过程---侧重于指令
编程语言的执行方式:
【一行一行】
1、顺序执行
2、循环执行for(遍历) while(循环条件) until(while相反)
3、选择执行---分支 if case

2、shell脚本语言介绍
优点:调用os(操作系统)的命令行,来实现所有功能;
缺点:没有库调用(区分Python)

shell脚本包括:1、*命令*(非常重要) 2、变量(全局变量、局部变量、本地变量、传参) 3、逻辑关系

shell的第一句话!!!(必须写)
#!/bin/bash -- 定义脚本解释器 (普遍认为#为注释行,这里特殊)shebang
#!/usr/bin/python

/etc/shells -- 查看当前系统支持的shell程序
echo $SHELL -- 查当前会话的shell程序
/etc/passwd -- 制定了用户默认支持的shell程序(/sbin/nologin)

shell 的执行:
1、bash命令来执行脚本
-n 查看shell脚本的逻辑错误(注意:单词写错可不管)
-x 逐行显示执行的脚本程序(方便拍错)
2、授权 chmod u+x filename.sh
使用全路径执行脚本,即可

3、变量
环境变量
局部变量 declare 命令 -- 定义变量类型
本地变量 local 在函数中使用

变量类型:
数值型:
1、整形 int
2、浮点型 float
3、布尔值 0 1 (真 假) (True False)
字符串:
1、普通字符及字符串
2、数组

编程语言的分类:
强类型语言 -- 数值必须被定义,才能进行处理或运算
弱类型语言 -- 编程语言可以自动识别变量类型
【*多态* 一个数据具有多个属性,而最后使用的属性取决于和它进行运算的数据】

传参
$? -- 上一条命令的执行状态 0 正确 1-255 错误
$1 $2 ... ${10} -- 命令后面传入脚本的数据,以空格为分隔符
$# -- 统计传参数量 ${$#} ?
$* -- 表示所有的传参,所有的传参以字符串形式进行输出
$@ -- 表示所有传参,将所有的传参以列表的形式进行输出
【工作中要对所有的传参进行操作的时候,就要考虑$*和$@】

定义变量格式:
NAME=VALUE (一个等号叫赋值,两个等号叫判断)
我们通过命令declare 定义变量类型
declare -i 整数 int() str()
declare -a 数组
变量命令:
1、下划线的方式指定变量名称
2、驼峰命名方式

4、test文件测试、条件判断
在脚本中,我们需要进行 语句分支; 说白了,就要做判断
判断就是使用test命令来实现;
使用格式:
1、test [option] file
2、[ 条件语句 ]
【什么时候加 [ ] 什么时候不加 [ ] ?】
常见的test选项:
比较选项:
-eq 等于
-ne 不等于
-gt 大于
-ge 大于等于
-lt 小于
-le 小于等于
判断选项:
-f 判断是否为普通文件
-d 判断是否为目录文件
-L 判断是否为连接文件
-r -w -x 判断文件是否具有 读 写 执行 权限
关联选项:
-o 或
-a 与
! 非
字符串判断:
= 判断两边的字符串是否相同
!= 不等于
-z 判断字符串是否存在
-n 和 -z 相反,存在为假,不存在为真

5、逻辑运算
与 && : 两边的命令,都为真,结果才是真
或 || : 两边的命令,一边为真,就是真,同时为假,才是假
非 !=

这个逻辑运算符,前后对接的都是单独存在的命令;

[ $? -eq 0 ] && exit 0 || exit 1

6、算术运算
*let 1+1
let a=1+1
echo $a
expr 1*1
expr 1 * 10
*$[$1+10]
a=$[2+3]
echo $a
$(($1/$2))
a=$((3/2))
echo $a

+ - * / % **

原文地址:https://www.cnblogs.com/wangshilin/p/11365000.html