Shell:可以一次执行多个命令
创建shell脚本:
文件名.sh 文件名后缀为.sh的文件叫做Shell脚本
编写
头部标识:注释为#/bin/sh 或者 #/bin/bash/ 或者不写(标识当前脚本由什么执行)
运行
1、有linux提供的/bin/sh执行 执行格式为 sh shell脚本
2、有linux提供的/bin/bash执行 执行格式为 sh shell脚本
3、由shell脚本改成可执行文件 执行格式为 ./shell脚本
变量
shell当中变量没有数据类型,必须初始化变量,否则报错
特点
1、数字、字母、下划线,不能以数字开头
2、变量名区分大小写(大小写敏感)
3、建议变量的名称要通俗易懂
注意:变量赋值是通过等号(=)进行赋值,在变量、等号和值之间不能出现空格。显示变量值使用echo命令(类似于java中的system.out) ,加上$变量名,也可以使用${变量名}
使用:
1、$变量名:会把$后所有在一起的数字、字母、下划线看作变量
2、${变量名}:以大括号作为边界,只会把大括号内作为变量
修改:只能从新定义变量(变量名相同),然后对他的值进行修改,如果一个脚本中,有多个名称相同的边量,会把之前的值进行替换
位置变量:在脚本执行过程中使用的占位符,占位符等待参数的传递
格式:$数字
参数:执行中所给的内容,参数和参数之间以空格进行分割
注意:$0永远都是脚本名称(可以忽略)
数字个数是大于一位数的要使用{}进行括起来
数字可以看做下标
占位符接收不到参数,不会报错,只是不进行输出
接收参数时,可以跳着接收($1 $10)
/ect/profile中所配置的环境变量在任何地方都可以查找的到
引号
单引号:输出语句原样执行
双引号:可以有变量可以有转义符
输出语句中:引号可加可不加(没有固定的格式)
注意:单引号输出语句原样执行,不能在在单引号中输出单引号
使用单引号最好只使用两个单引号
拼接
在输出语句中连着获取变量
输出语句中双引号是否使用都行
字符串
获取长度
格式:${#变量名}
截取
格式:${变量名:开始的index:截取的长度}
注意:
开始下标不写,表示从头开始截取几个 例如:${str::5}
长度不写,表示从开始位置到末尾 例如:${str:1}
都不写表示原字符串 例如:${str}
替换
格式:${变量/原字符串内容/替换的内容}
注意:只能从左向右替换一次
格式:${变量//原字符串内容/替换的内容}
注意:全部替换
注意:替换之后不会再原字符串上进行修改,而会产生一个新的字符串
删除
从头开始
格式1:${变量#表达式}
有多个相同的匹配条件执行第一个
格式2:${变量##表达式}
有多个相同的匹配条件执行最后一个
从尾开始
格式1:${变量%表达式}
有多个相同的匹配条件执行第一个
格式2:${变量%%表达式}
有多个相同的匹配条件执行最后一个
注意:从未开始匹配 但是表达式还是从左向右开始写
注意:删除之后不会再原字符串上进行修改,而会产生一个新的字符串
不能进行字符串的跳过删除,要么从头开始匹配删除,要么从未开始匹配删除
运算符
算术运算符
shell中不支持简单的算术求值操作,需要通过expr算术计算工具才能实现shell中的计算
格式1:`expr 值空格符号空格值`
例如:`expr 2 + 2`
格式2:${值符号值}
例如:$[10+20]
比较运算符
格式:$[值 比较符号 值](空格加不加无所谓)
例如:$[1>2] 结果为0
例如:$[1<2] 结果为1
注意:比较结果使用0表示false 1表示true
逻辑运算符
&:and 与 两边都是true结果为true
|:or 或 两边都是false结果为false
!:not 非 表示结果反转
语句
if
格式1:if 判断条件
then
执行语句
fi
格式2:if 判断条件
then
执行语句
else
执行语句
fi
格式3:if 判断条件
then
执行语句
elif 判断条件
then
执行语句
.
.
.
else
执行语句
注意:else可以不写
判断条件的写法
() (()) [[]] []
[]:两边需要加空格,符号两边也需要加空格,使用符号时需要加上转义符,使用字母时不需要
例如:[ 1 > 2](结果有问题 默认是对)需要加上转义符[ 1 \> 2]
例如:[ 1 -gt 2]
[[]]:两边需要加空格,符号两边也需要加空格,可以直接使用符号或字母
例如:[[ 4 > 2 ]]
例如:[[ 4 -gt 2]]
():不用了
(()):不需要加空格,不能识别字母
例如:((4>2))
使用逻辑运算符
格式:表达式1逻辑运算符$表达式2
例如:((${age}>=18))&((${age}<=45))
格式:表达式1$逻辑运算符表达式2
((${age}>=18))&&((${age}<=45))
一个逻辑运算符和两个的区别
例如:and同时为true 最终结果才为true
如果第一个条件为false,最终结果为false
一个and时,会判断第二个条件
两个and时,不会判断第二个条件