什么是shell
1、shell是操作系统的最外层,是一个用户跟操作系统之间交互的命令解释器。
2、大多数linux默认的shell命令解释器是 bash(/bin/bash)
3、shell独立于内核,是链接内核和应用程序的桥梁,通俗来讲shell是内核周围的外壳
常见的 shell :
Bourne Shell (/usr/bin/sh 或 /bin/sh)
Bourne Again Shell (/bin/bash)
C Shell (/usr/bin/csh)
K Shell (/usr/bin/ksh)
Shell for Root (/sbin/sh)
什么是shell脚本
1、shell脚本是shell命令组成的文件。换一种说法,shell脚本是利用shell的功能所写的一个程序,
2、这个程序使用纯文本文件将一些shell语法和指令写在里面,让使用者很容易的就能够一个操作执行多个命令。
shell的用途
1、shell可以合并编程语言以控制进程和文件,以及启动和控制其他程序
2、shell能够减少大量的重复输入和交互操作,能够进行批量的处理和自动化完成维护,减轻管理层的负担
变量
1、概念
变量用来存放系统或用户需要使用的特定参数或者值,变量的值可以根据用户设定或者系统环境变化而相应变化,在Shell脚本中使用变量,可使脚本更加灵活,适应性更强。
与变量相对应的是常量,常量例如“Hello World”,是不可改变的
变量可以给个变量名,假如为name,值是可变的
2、变量注意事项
变量命名规则:必须由大写字母、小写字母、下划线、数字,并且首字母不能是数字
在变量命名时:建议也简写出该变量是什么用处
变量值的类型:值的类型会分为整型、浮点型、字符串型、布尔型等,而且使用变量需要指定类型Shell 默认的变量类型都是字符串,无需指定类型
[root@cang shell]# env //查看所有环境变量
(3)位置变量
通过命令行给脚本程序传递参数 (也属于预定义变量)
为了在使用Shel脚本程序时,方便通过命令行为程序提供操作参数,Bash引入了位置变量的概念位置变量有 ,n,n为1~9之间的数字
$0:第一个字段表示命令名或脚本名称
$1:脚本要处理的第一个参数
$2:脚本要处理的第二个参数
....
Shell脚本最多可以直接处理9个参数
(4)预定义变量
Bash中内置的一类变量,不能直接修改
预定义变量是Bash程序预先定义好的一类特殊变量,用户只能使用预定义变量,而不能创建新的预定义变量,也不能直接为预定义变量赋值。
$*:将所有参数作为整体
$@:单个参数的组合,每个参数占一行
$0:保存了脚本名称
$?:保存命令或脚本的执行状态码
$#:保存脚本要处理的参数的个数
4、变量的定义与输出
(1)定义一个新的变量
格式:变量名=变量值
注意:变量名必须以字母或下划线开头,严格区分大小写
(2)变量符号运用
双引号:允许通过$符号引用其他变量值
单引号:禁止引用其他变量值,$视为普通字符
反撇号: 或$(): 命令替换,提取命令的执行结果
(3)输入和输出
输入格式:read [-p "显示的提示信息"] 变量名
输出格式:echo $变量名
5、变量的作用范围
默认情况下,新定义的变量只在当前Shell环境中有效,因此称为局部变量。当进入子程序或新的子shell 时,局部变量将无法再使用。
为了使用户定义的变量在所有子Shell环境中能够继续使用,减少重复设置工作,可以通过内部命令export将指定的变量导出为“全局变量”。
格式 1:export 变量名
格式 2:export 变量名=值
6、变量的数学运算
(1)整数运算
格式:expr 变量1 运算符 变量2 运算符 变量3....
运算符:+ - * /(+ - × ÷)
数字判断
1、格式
-eq:equal,等于,一般用于 [ $? -eq 0 ],也就是判断上条命令返回值等于 0,直接数字 -eq 数
字也可以 equals
-ne:not equal,不等于,一般用于 [ $? -ne 0 ],判断上条命令返回值不等于 0
-gt:greater than,大于
-ge:greater or equal,大于或等于
-lt:less than,小于
-le:less or equal,小于或等于
字符串判断
1、格式
[ 字符串1 == 字符串2 ] 字符串内容相同
[ 字符串1 != 字符串2 ] 字符串内容不同
[ -z 字符串 ] 字符串内容为空
[ -n 字符串 ] 字符串内容不为空
五、文件、目录、权限的判断
1、格式
[ 操作符 文件或目录]
常用的测试操作符:
-e "文件目录或自定变量" 判断文件或目录是否存在 exists
-f "文件目录或自定变量" 判断是否为文件 isfile
-d "文件目录或自定变量" 判断是否为目录 isdirect
-w "文件目录或自定变量" 判断是否可写 w
-r "文件目录或自定变量" 判断是否可读 r
-x "文件目录或自定变量" 判断是否可执行 x
-s "文件目录或自定变量" 判断文件大小,非0时为真 (若为非空文件,则为真) size
-z "文件目录或自定变量" 判断变量参数值是否为空,为空为真,非空为假 zore
与或判断
判断多个条件
多个条件其中一个成立,或
多个条件都要成立,与
或运算判断:|| 或,两个条件满足其一即可,还有-o
与运算判断:&& 与,两个条件都得满足才行