shell脚本day03-编程原理
一、编程介绍
(计算机只能识别二进制指令)
- 早期编程:驱动和硬件默认不能使用,但不同厂家设备之间需要进行指令沟通,我们需要驱动来进行翻译;更趋紧与硬件开发的工程师,要学习汇编语言,而汇编语言被厂家所限制。C,C++的底层就是汇编语言
- 现在编程基于高级语言,以及超高级语言,更好的让程序员能够实现汇报功能。高级语言、超高级语言需要翻译成计算机可读的语言(二进制指令)
- 汇编语言的分类
- 解释型---逐行解释,逐行执行 shell python java
- 编译型---一次编译,全部行 C C++ C# java
- 面向对象---侧重于数据的编程语言
- 面向过程---侧重于指令
- 编程语言的执行方式:
【按行执行】
-
- 顺序执行
- 循环执行---for(遍历) while(循环条件) until(和while相反)
- 选择执行---分支 if case
二、shell脚本语言介绍
shell语句是面向过程的,侧重于指令集。
优点:调用os(操作系统)的命令行,来实现所有功能;
缺点:没有库调用(区别于python)
shell语句的基本组成成分:
-
- 命令(重点!)
- 变量(全局变量、局部变量、本地变量)
- 逻辑关系
- 数据-变量(转参)
shell没有内嵌函数,没有函数库调用,没有调用库的接口
三、shell的第一句话(重要)
#!/bin/bash //定义脚本解释器(普遍认为#为注释行,这里特殊) #!/usr/bin/python /etc/shells //查看当前系统支持的shell程序 echo $shell //查看当前会话的shell程序 /etc/passwd //指定了用户默认之前的shell程序(/sbin/nologin)
shell的执行:
- bash命令来执行脚本
-
- -n 查看shell脚本的逻辑错误(注意:单词写错无法查看)
- -x 逐行显示执行的脚本程序(方便排错)
2. 授权 chmod u+x filename.sh
使用全路径执行即可
四、变量 (一段未命名的内存空间)
- 环境变量
- 局部变量 declare命令---定义变量类型
- 本地变量 local在函数中使用
- 变量类型
- 数值型
- 整形 Int
- 浮点型 float
- 布尔值 true false 0 1
- 字符串
- 普通字符及字符串
- 数组
- 编程语言的分类
- 强类型语言---数值必须被定义,才能进行处理或运算
- 编程语言可以自动识别变量类型
- 数值型
注:多态:一个数据具有多个属性,而最后使用的属性取决于和它进行运算的数据
5.传参
-
- $? --- 上一条命令的执行状态 0 正确 1-255错误
- $1 $2 ... ${10} --- 命令后面传入脚本的数据,以空格为分隔符
- $# --- 统计传参的数量 //${$#}取该条命令的最后一个参数
- $@ --- 表示所有的传参,所有的传参以列表的形式进行输出
- $* --- 表示所有的传参,所有的传参以列表的形式进行输出
- 工作中应考虑$@于$*的区别
6.定义变量格式
-
- NAME=VALUE(一个等号叫赋值,俩个等号叫判断)
- 通过命令declare定义变量类型
-
declare -l a=10 //相当于 int() declare -a //数组
7.变量命名有俩种方式,分别为以下划线的方式指定变量名称和以驼峰命名方式命名
五、test文件测试、条件判断
在脚本中,我们需要进行语句分支,简单来说,就是要判断,而判断就是用test命令来实现的
1.使用格式
-
- test[opthon]file
- [ 条件语句 ] //一定要在中括号内加入俩个空格
2.常见的test选项
比较选项 | -eq 等于 | -ne 不等于 | -gt 大于 | -ge 大于等于 | -le 小于等于 | -lt 小于 |
判断选项 | -f 判断是否为普通文件 | -d 判断是否为目录文件 | -l 判断是否为连续文件 | -r-w-x 判断文件是否具有读写执行权限 | ||
关联选项 | -0 或 | -a 与 | ! 非 | |||
字符串判断 | = 判断俩边的字符串是否相等 | != 不等于 | -z 判断字符串是否存在 | -n 作用与-n相反 |
六、逻辑运算与算术运算
与:&& ; 或 :|| ;非:!=
let !+1
expr 1*1
$[$1+10]
$(($1/$2))