shell脚本是什么呢?简单来说,它就是许多命令的一个集合;Shell脚本是一个面向过程的编程语言,它是通过解释器来解释运行脚本里的每一条命令;
面向过程的编程语言的元素:变量、数组、流程、函数
下面就来学习一下Shell脚本吧!
一.变量
变量:可以理解它为一个命名的内存空间,里面的数据是可变的
1.变量命名法则:
(1).只能使用数字、字母或下划线,而且不能以数字开头
(2).不能使用系统中的关键字:比如if,elif,fi,then,for...等
(3).见名知义
2.变量类型
(1).本地变量:只对当前Shell进程有效,对当前shell之外的其它shell(包括其父shell,子shell等)都无效
(2).环境变量:对当前shell进程及子shell进程有效
(3).局部变量:仅在当前shell进程中的某段代码空间内有效,通常用于函数内的变量
(4).位置变量:表示参数在传递过程中所在的位置,比如:$0表示shell脚本自身,$1表示第一个参数,$2表示第三个参数……
(5).特殊变量:表示特殊作用的变量,比如:$?表示上一个命令执行成功与否的状态值,$#表示参数个数,[email protected]和$*表示所有参数的集合
3.声明变量并赋值
(1).本地变量
无须声明,直接赋值即可被调用
VAR_NAME=VALUE
(2).环境变量
export VAR_NAME=VALUE或declare -x VAR_NAME=VALUE
可以使用以下命令查看当前shell中的环境变量:
env
export
printenv
(3).局部变量
local VAR_NAME=VALUE
(4).只读变量
readonly VAR_NAME=VALUE或declare -r VAR_NAME=VALUE
只读变量一旦被赋值后,不能再次被赋值
(5)整型变量
let VAR_NAME=VALUE或declare -i VAR_NAME=VALUE
注:查看当前已定义的所有变量可以用以下命令:
set
略……
(6)几个高级的变量赋值:
${var:-word}:表示如果var为空或未设置,那么返回word;否则,则返回
${var:=word}:表示如果var为空或未设置,那么返回Word;并且将word赋值给var;否则返回var中的值
${var:?err_info}:表示如果Var为空或未设置,那么返回错误 信息err_info;否则,则返回Var自身的值
${var:+word}:表示如果var变量已设置,则返回word;否则,返回var值
4.变量引用
${VAR_NAME}
5.变量撤消
unset VAR_NAME
注:环境变量不能被撤消
二.数组
数组:是一个连续的多个独立的内存空间,每个内存空间相当于一个变量,只是将许多变量组合起来形成一个集合
1.数组声明
declare -a ARRAR_NAME
2.数组元素
数组元素即是数组集合中的一个个成员,每个成员都是由数组名加索引编号组成,编号从0开始,比如:array[0],array[1]……
3.数组赋值
(1)一次只赋值一个元素
ARRAY[index]=VALUE
(2)一次赋值全部元素
ARRAY_NAME=("red" "black" "white")
(3)指定索引号进行赋值
ARRAY=([0]="red" [1]="black" [3]="white")
(4)交互式赋值
read -a ARRAY_NAME
4.引用数组元素
(1)指定元素编号
${ARRAY[index]}
(2)获取全部元素值
${ARRAY[*]}或${ARRAY[@]}
(3)数组元数个数:
${#ARRAY[*]}或${#ARRAY[@]}
(4)指定元素偏移值获取元素值
${ARRAY[@]:offset:number}
例如,对于数组a2偏移一个,取后面两个:
(5)向数组中追加一个元素
ARRAR[${#ARRAR[@]}]
例如,向a2数组中添加一个元素:
三.字符串
(1).字符串切片
${var:offset:lenth} :对Var字串偏移取出字符
${var: -lenth}:取出var字串最后的几个字符,注:冒号之后要有空格
(2).基于模式切割字符串
${var#*word}:word可以是指定的任意字符,表示自左而右,查找var变量,删除从首字符至首次出现与word匹配的字符之间的所有字符
${var##*word}:word可以是指定的任意字符,表示自左而右查找Var变量,删除从首字符至最后一次出现与Word匹配的字符之间的所有字符
${var%word*}:word可以是指定的任意字符,表示自右而左查找,删除最后一个字符至首次匹配到的字符之间的所有字符
${var%%word*}:word可以是指定的任意字符,表示自右而左查找,删除最后一个字符至最后一次匹配到的字符之间的所有字符
(3)查找并替换
${var/pattern/substi}:查找var所表示的字串中,第一次被pattern匹配到的字串,并以substi替换之
${var//pattern/substi}:查找Var所表示的字串中,全局替换
${var/#pattern/substi}:行首锚定查找并替换
${var/%pattern/substi}:行尾锚定查找并替换
(4)查找并删除
${var/pattern}:删除第一次被pattern匹配到字符
${var//pattern}:全局匹配并删除
${var/#pattern}:行首匹配并删除
${var/%pattern}:行尾匹配并删除
(5)字符串大小写转换
var=VALUE
${var^^} :所有小写字符转换成大写字符
var=VALUE
${var,,}:所有大写字符转换成小写字符