Linux Shell基础学习(一)

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).特殊变量:表示特殊作用的变量,比如:$?表示上一个命令执行成功与否的状态值,$#表示参数个数,$@和$*表示所有参数的集合

3.声明变量并赋值

(1).本地变量

无须声明,直接赋值即可被调用

VAR_NAME=VALUE

clip_p_w_picpath001

(2).环境变量

export VAR_NAME=VALUE或declare -x VAR_NAME=VALUE

clip_p_w_picpath002

clip_p_w_picpath003

可以使用以下命令查看当前shell中的环境变量:

env

export

printenv

(3).局部变量

local VAR_NAME=VALUE

(4).只读变量

readonly VAR_NAME=VALUE或declare -r VAR_NAME=VALUE

clip_p_w_picpath004

只读变量一旦被赋值后,不能再次被赋值

(5)整型变量

let VAR_NAME=VALUE或declare -i VAR_NAME=VALUE

clip_p_w_picpath005

注:查看当前已定义的所有变量可以用以下命令:

set

clip_p_w_picpath006

略……

(6)几个高级的变量赋值:

${var:-word}:表示如果var为空或未设置,那么返回word;否则,则返回

clip_p_w_picpath007

${var:=word}:表示如果var为空或未设置,那么返回Word;并且将word赋值给var;否则返回var中的值

clip_p_w_picpath008

${var:?err_info}:表示如果Var为空或未设置,那么返回错误 信息err_info;否则,则返回Var自身的值

clip_p_w_picpath009

${var:+word}:表示如果var变量已设置,则返回word;否则,返回var值

clip_p_w_picpath010

4.变量引用

${VAR_NAME}

clip_p_w_picpath011

5.变量撤消

unset VAR_NAME

clip_p_w_picpath012

注:环境变量不能被撤消

clip_p_w_picpath013

二.数组

数组:是一个连续的多个独立的内存空间,每个内存空间相当于一个变量,只是将许多变量组合起来形成一个集合

1.数组声明

declare -a ARRAR_NAME

clip_p_w_picpath014

2.数组元素

数组元素即是数组集合中的一个个成员,每个成员都是由数组名加索引编号组成,编号从0开始,比如:array[0],array[1]……

3.数组赋值

(1)一次只赋值一个元素

ARRAY[index]=VALUE

clip_p_w_picpath015

(2)一次赋值全部元素

ARRAY_NAME=("red" "black" "white")

clip_p_w_picpath016

(3)指定索引号进行赋值

ARRAY=([0]="red" [1]="black" [3]="white")

(4)交互式赋值

read -a ARRAY_NAME

clip_p_w_picpath017

4.引用数组元素

(1)指定元素编号

${ARRAY[index]}

clip_p_w_picpath018

(2)获取全部元素值

${ARRAY[*]}或${ARRAY[@]}

clip_p_w_picpath019

(3)数组元数个数:

${#ARRAY[*]}或${#ARRAY[@]}

clip_p_w_picpath020

(4)指定元素偏移值获取元素值

${ARRAY[@]:offset:number}

例如,对于数组a2偏移一个,取后面两个:

clip_p_w_picpath021

(5)向数组中追加一个元素

ARRAR[${#ARRAR[@]}]

例如,向a2数组中添加一个元素:

clip_p_w_picpath022

三.字符串

(1).字符串切片

${var:offset:lenth} :对Var字串偏移取出字符

clip_p_w_picpath023

${var: -lenth}:取出var字串最后的几个字符,注:冒号之后要有空格

clip_p_w_picpath024

(2).基于模式切割字符串

${var#*word}:word可以是指定的任意字符,表示自左而右,查找var变量,删除从首字符至首次出现与word匹配的字符之间的所有字符

clip_p_w_picpath025

${var##*word}:word可以是指定的任意字符,表示自左而右查找Var变量,删除从首字符至最后一次出现与Word匹配的字符之间的所有字符

clip_p_w_picpath026

${var%word*}:word可以是指定的任意字符,表示自右而左查找,删除最后一个字符至首次匹配到的字符之间的所有字符

clip_p_w_picpath027

${var%%word*}:word可以是指定的任意字符,表示自右而左查找,删除最后一个字符至最后一次匹配到的字符之间的所有字符

clip_p_w_picpath028

(3)查找并替换

${var/pattern/substi}:查找var所表示的字串中,第一次被pattern匹配到的字串,并以substi替换之

clip_p_w_picpath029

${var//pattern/substi}:查找Var所表示的字串中,全局替换

clip_p_w_picpath030

${var/#pattern/substi}:行首锚定查找并替换

clip_p_w_picpath031

${var/%pattern/substi}:行尾锚定查找并替换

clip_p_w_picpath032

(4)查找并删除

${var/pattern}:删除第一次被pattern匹配到字符

clip_p_w_picpath033

${var//pattern}:全局匹配并删除

clip_p_w_picpath034

${var/#pattern}:行首匹配并删除

clip_p_w_picpath035

${var/%pattern}:行尾匹配并删除

(5)字符串大小写转换

var=VALUE

${var^^} :所有小写字符转换成大写字符

clip_p_w_picpath036

var=VALUE

${var,,}:所有大写字符转换成小写字符

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章