一、shell种类
查看默认shell: echo $SHELL ---默认shell是bash
查看有哪些shell:cat /etc/shells
二、shell脚本
(1)特点
脚本文件中的内容是shell命令的集合,后缀名必须是.sh的一种文本文件。脚本声明#!/bin/bash(必须写在第一行),意在告诉计算机我们的脚本使用的是shell解释器是:/bin/bash。
(2)脚本应用场景
重复操作;批量事务处理;自动化运维;定期任务执行;服务器运行监控。
(3)shell程序执行
①交互式shell环境直接执行
即通过相对路径或者绝对路径来执行,要求脚本文件必须具有可执行权限。
第一步:赋予可执行权限(赋值法、加减法、数字法都可)
第二步:执行
②使用解释器执行(推荐使用)--不需要获取可执行权限
格式: bash 脚本
(4)交互式赋值
字符串输出:echo 字符串
获取键盘输入,并保存到一个变量中
格式:read [-p "提示信息"] 变量名
三、变量
变量代表的是一个存储空间,空间的名称就是变量名,通过变量名可以访问到空间中的值
(1)变量的命名
变量名只能包含字母、数字和下划线,并且不能以数字开头;区分大小写
尽量做到见名知义
(2)定义变量
变量名=变量的值
(3)变量的调用
方式一:$变量名
使用条件:变量的调用是在行尾(或单词的末尾)时可以使用
方式二:${ 变量名}
(4)变量替换
方式一,括号替换:$(命令1;命令2......)
方式二,倒引号替换:`命令1;命令2......`
作用:括号或倒引号内命令的执行结果(标准输出)会返回给当前shell,相当于产生了一个新的命令,其执行结果可以被echo或者被当前shell的命令所使用。
举例:
(5)位置变量
使用场合:在使用脚本时,很多时候脚本中大部分代码都是固定的,区别只是传入的参数有所区别,这时候可以使用位置变量来实现参数的传递。代码中很多语句都是固定的,区别只在某些变量的取值不一样。
位置变量的使用:可以使用$1, $2, $3, ......,${10},${n} 来获取执行脚本时,传入的参数,这种变量就叫位置变量。
位置变量用来接收向shell脚本传递的参数,第一个参数用$1来获取,第二个参数用$2来获 取,以此类推。但$9以后的位置变量要写为${10}。($数字:是固定写法,用于接收指定位置的数据)
使用步骤:
第一步:在脚本使用位置变量,来接收向shell脚本传递的参数
第二步:在执行shell脚本时,同时向脚本传递参数,参数之间用空格隔开
(6)特殊变量
$0:脚本名称自身
$?:上一条命令的执行状态,状态用数字表示:0-255
0:成功
1-255:失败
echo $? 执行结果为0,表示上一条命令执行成功
$#:记录位置参数个数的总和
$*: 详细列出所有的位置参数
$$: 当前所在进程的进程号
四、变量的算术运算
只支持整数的运算,不支持小数
(1)算术运算符
+,- ,*,/(取整),%(取余)
+= ,-=,*=,/=,%=
自增自减。变量自增++,变量自减—
(2)算术运算
进行运算的时候,如果直接运算,会当做一个字符串来使用,而不是当做数字进行运算
算术运算方式:在shell中,等号和运算符的左右不能有空格
方式一: let varName=算术表达式
通过let执行算术运算,将算术表达式的运算结果赋值给变量varName
注意包括括号必须使用在前面(方式二不受此规则限制)
方式二: varName=$[算术表达式]
五、条件判断
方式一:test 条件表达式
方式二:[ 条件表达式 ] 或 [[ 条件表达式 ]](注意表达式两边和操作符两边都要有空格)
六、文件操作符
-d:测试是否为目录(Directory)
-e:测试目录或文件是否存在(exist)
-f:测试是否为普通文件(file)
-r:测试当前用户是否有权限读取(read)
-w:测试当前用户是否有权限写入(write)
-x:测试当前用户是否可执行该文件
-L:测试是否为符号连接(Link)文件
注意:权限判断的时候不能使用root用户,root用户是超级管理员,具有所有的权限
七、 整数数值比较测试
只能是整数
格式: [ 数值1 操作符 数值2 ] ---条件表达式两边和操作符两边必须要有空格
操作符:-eq等于(equal to)
-gt大于(great than)
-ge大于等于(great or equal to)
-lt小于(less than)
-le小于等于(less or equal to)
-ne不等于(not equal to)
八、字符串比较测试
格式:[ 字符串1 比较符 字符串2 ]
操作符:= :字符串内容相同
!= :字符串内容不同
-z :字符串内容为空。格式:[ -z 字符串 ]
九、逻辑测试
格式:[ 表达式1 ] 逻辑操作符 [ 表达式2 ]........[ 表达式n ]
---逻辑操作符合表达式之间要有空格
常用的测试条件的逻辑操作符:&&(与)、||(或)、!(非)
总结: 在算术运算符中,运算符两边不能有空格,表示式两边可以有也可以没有空格。在条件运算中,运算符和表达式两边都必须要有空格。
十、if语句
(1)单分支:
if 条件判断表达式; then
statement1
……
fi
判断/home/admin目录下是否有文件passwd,如果有则打印文件存在
(2)双分支:
if condition; then
statement1
else
statement2
fi
·(3)多分支:
if condition; then
statement1
elif condition; then
statement2
……
els
statementn
fi
总结:第一步首先分析题目,确定有几个判断条件,根据判断条件,选择合适的if语句表达式 ;第二步先将表达式写入脚本,确保语法格式正确;第三步补充判断条件;第四步补充代码。
十一、循环语句-for
(1)格式:
for 变量名 in 列表;do
循环体(正常执行的执行命令)
语句1
语句2
语句3
……
done
说明:当列表中有足够的值赋值给变量时,则执行循环体重的语句。当列表中没有足够的值赋值给变量时,则跳出循环,则循环结束。
(2)列表
方式一:{}
数字集合:{1..7} ---1-7之间的数字
字母集合:{a..g} ---a-g之间的字母
方式二:
格式:
`seq 初始值i 步长q 终止值d`
从初始值i开始取值,到终止值d为止,每取一次值增加步长q
步长:相邻两次之间的间隔
举例:
`seq 1 2 100`
十二、函数
一段代码块,用于实现一定的功能,调用该函数,即可执行该代码块
(1)函数定义:
function 函数名() {
命令序列
……
return xxx
}
(2)函数调用
格式: 函数名 参数1 参数2 ......
参数之间用空格隔开