-
脚本定义与分类
1.1
1.2
1.3
编程语言类型:
强类型:变量需要申明是字符型还是数字型还是其他,例:字符串1跟数字型2相加会报错
弱类型:可以不用申明是字符串或是数字型,例;字符串1跟数字型2相加可正常得3
shell 属于弱类型并且不支持浮点数
1.4编译器:所有的程序代码一起都变异成二进制
C、C++、java
解释器:解释之前先快速检查一遍语法,没有问题然后一条条命令开始解释
shell、perl、python -
变量:命名的内存空间
2.1 类型
环境变量(export VARNAME=VALUE、也可以先定义再导出):对当前shell以及子shell有效其他shell无效
本地变量(set VARNAME=VALUE 也可直接赋值):只在当前shell中使用,子shell、其他shell都没效
局部变量(local VARNAME=VALUE): 只在当前代码段有效
位置变量
特殊变量
$ 0 脚本本身
shift [n] :配合位置变量,剔除n个参数
注意:函数可以修改全局变量,需要重新赋值local(局部变量)才能实现同名不同值
例:
2.2 注意:引用变量:${VARNAME} ,括号可以省略,但是后面有参数混淆时要加上
单引号不可以引用变量,双引号才可以
export、unset 都不需要加 $ 不然撤销的不是变量而是变量的值
2.3 本地变量:
2.4 环境变量:
2.5 只读变量:变量定义完后不允许再改动也不能被销毁只能等到shell进程终止
3. 变量 bash配置文件
3.1 登录方式分类
3.2 bash配置文件按功能分类分类
3.3
3.4 例:永久定义别名
vim ~/.bashrc 添加
修改配置文件不会立即生效需要重新读取或者重新登录
- 脚本运行
#!/bin/bash :我们写完的脚本是系统不能识别的ASIIC码,必须注明要用的解释器路径来调用解释器执行
脚本在执行时需要他的路径,如果没有写路径默认去找$PATH,还要有执行权限
也可以前面直接加bash或其他解释器,因而脚本就作为解释器的参数可以不需要执行权限
但是 独立自动运行时还需要执行权限
条件判断
条件判断-a到-z的含义
1.
2.
3.
3.1
3.2 字符串比较
4. 1 逻辑与 &&
逻辑或 ||
逻辑否 !
4.2
4.3
例:
注意|| 后面不能加多个&&,多个&&后面可以加||
演示:
5.
bash -n +脚本 测试语法错误
bash -x +脚本 显示脚本执行的每一步
exit +n 直接退出脚本和设置状态码n
如果想要返回值就反撇号` 如果想要执行状态就不加
如果想要一个命令返回状态就不能赋予变量名
6.算数 运算
查看算术运算符号 help let
bc
scale 保留两位精度
for 循环
1.1
变量只能是字符串不能进行运算所以要做声明
let
declare 声明
-i SUM=0 整数
-x 环境变量
1.2 赋值表达式:变量等于变量自身加|减|乘|除一个变量
例
2.如何生成列表
{1…100}
seq:三个数分别是 [起始数]、[步进长度]、结束数 要用反撇号
例子
向所有用户问好
如果是–add 添加十个不存在用户,如果是–del 删除十个已存在用户
如果位置变量给的是user1,user,user3 可以用sed替换空格
随机10个数取最大值最小值
3.for的另一种风格用法,近似于C语言
三个表达式分别表示:
expr1:指定初始条件、初始变量的值
expr2:判定什么时候退出循环
expr3:修正第一个变量的值
例:
例2:
case语句
- 结构
补充:
例
例参数可以带多个选项可以给多次用法
接上图
例:
例:
例:
接上
while循环
1.适用于循环次数未知的场景,但必须有退出循环条件避免进入死循环
2.语法:CONDITION 进入下一次循环条件
例1:
100以内的和
例2
例3
例4
例4:
while特殊用法:
until循环
1.与while用法相反
例
发现hadoop登录就退出循环并echo
对以上进行优化
当引用一个状态返回值时可以直接当做进入循环的条件
函数
return: 显示状态返回值(如果需要函数的状态返回值,默认最后一个命令的状态通常不符合要求),函数任何时候遇到return都会终止此函数,不会执行后面函数,0为成功非 1-255为失败,然后执行函数之外往后的代码
例1:
调用函数自身命令 用fact,递归调用必须要有中指终止条件
补充
break与continue
例:
例2:
优化以上脚本
数组/字符串
例1.
例2
2.
3.
4.