Shell编程(2)
大家好呀!今天简单介绍一下Shell基础,包括变量、数组以及四则运算等方面内容。
1、变量
1.1 变量分类
1)本地变量:当前用户自定义的变量。当前进程中有效,其他进程及当前进程的子进程无效。
2)环境变量:当前进程有效,且能够被子进程调用。
env:查看当前用户的环境变量
set:查询当前用户的所有变量(临时变量与环境变量)
export:将当前变量变成环境变量
1 | # 临时将一个本地变量(临时变量)变成环境变量 |
3)全局变量:全局所有的用户和程序都能调用,且继承,新建的用户也默认能调用。
1 | $HOME/.bashrc #当前用户的bash信息(aliase、umask等) |
注:用户登录系统读取相关文件的顺序:/etc/profile——>$HOME/.bash_profile——>$HOME/.bashrc——>/etc/bashrc——>$HOME/.bash_logout
4)系统变量 : 即内置bash中的变量,shell本身已经固定好了它的名字和作用。
1 | $?:上一条命令执行后返回的状态,当返回状态值为0时表示执行正常,非0值表示执行异常或出错 |
注:$* 表示将变量看成一个整体
,$@ 表示变量是独立的
1.2 变量定义规则
1)默认情况下,shell里定义的变量是不分类型的,可以给变量赋予任何类型的值;等号两边不能有空格,对于有空格的字符串做为赋值时,要用引号引起来(变量名=变量值)
2)变量的获取方式: $变量名
或 ${变量名}
($符表示调用变量)
如果是获取变量的全部,两个都可以;如果是获取变量的某一部分,用${} 。eg:echo ${a:2:3},表示从变量a的第3个字符开始,往后连续获取三个字符。
3)取消变量(unset):unset 变量名
4)变量名区分大小写,变量名可以是字母或数字或下划线,但不能以数字开头,避免使用特殊字符和Shell关键字。
1.3 有类型变量
使用declare声明类型,常见如下:
-i:定义整数变量
-r:定义只读变量 readonly
-x:标记变量通过环境导出 export
-a:指定为索引数组(普通数组);查看普通数组
-A:指定为关联数组;查看关联数组
2、数组
1)普通数组:只能使用整数作为数组索引(下标)
2)关联数组:可以使用字符串作为数组索引(下标)
2.1 数组定义
普通数组定义:用括号来表示数组,数组元素(变量)用“空格”符号分割开。定义数组的形式为如下。
1)使用索引定义数组
一次赋一个值
1 | # 变量名[索引]=变量值 |
2)用括号表示,元素之间用”空格”分隔
一次赋多个值
1 | array=(var1 var2 var3 var4) |
查看普通数组:declare -a
2.2 获取
以数组array为例。
${array[i]}:i为元素下标,使用@ 或 * 可获取数组中的所有元素
1)获取第一个元素(下标为0)
1 | echo ${array[0]} |
2)获取所有元素(*或@)
1 | echo ${array[*]} |
3)获取元素个数(#)
1 | echo ${#array[*]} |
5)访问指定的元素
${array[*]:起始下标:结束下标}
1 | echo ${array[@]:1:2} |
3、关联数组
3.1 声明
declare -A 数组名
1 | declare -A books |
3.2 赋值
1)一次赋一个值(下标定义):
数组名[索引]=变量值
1 | books[linux]=3 |
2)一次赋多个值(括号定义):
1 | names=([name1]=Bob [name2]=Jack [name3]=Lucy) |
4、交互式定义变量的值
使用read命令,作用:可以让用户去定义变量值
1 | -p:提示信息 |
注:变量名字前要用空格隔开
5、其他变量
5.1 dirname & basename
作用:取出目录下的目录和文件。dirname取目录,basename取文件。
5.2 变量”内容”的删除 & 替换
注意左右方向
1 | 1个“%”代表从右往左去掉一个/key/ |
6、简单的四则运算
默认情况下,shell只支持简单的整数运算,如+、-、*、/、%(取模,求余数)
Bash shell 的四种算术运算方式:
1)使用$(( ))
2)使用$[ ]
3)使用expr 外部程式
,注意要空格。
4)使用let 命令