【Linux】shell脚本的变量与运算
目录
一.变量
1.1什么是变量
1.2变量的命名
1.3变量的调用
1.4字符的转义
1.5变量的取消
二.变量的类型
2.1函数级变量
2.2环境级变量
2.3用户级变量
2.4系统级变量
2.5常见的系统变量
三..特殊变量及定义
3.1用命令的执行结果定义变量
3.2传参变量
3.3交互式传参变量
3.4数组变量
3.5字符串变量
四.shell脚本中的函数
五.shell中的运算
练习:倒计时脚本
一.变量
1.1什么是变量
- 变量是使用一串固定的字符来表示不固定的值
- 变量的实现原理就是内存存储单元的一个符号名称
1.2变量的命名
- 变量的名称只能包含数字,大小写字母,以及下划线
- 变量的名称开头只能用大小写字母及下划线开头,不能使用数字开头
- 同一个名称变量,在多次被赋值时为覆盖操作
- 变量的名称复杂可以使用驼峰命令发中间用下划线隔开
1.3变量的调用
变量的调用使用到$符
在对变量赋值后,使用$符直接调用变量名称
如果要表示1number
在调用变量的时候使用{}把变量名称括起来,{}可以对数组变量,字符串变量进行操作
1.4字符的转义
- 在shell中有很多本身有特殊功能的字符,比如( ' \ ! $),所以就需要转义
- 在shell中表示转义的有,反斜杠 /,双引号 " ",单引号 ' '
- 双引号与单引号表示批量转义,区别在于双引号为弱引用,单引号为强引用,弱引用不能引用( ' \ ! $)
1.5变量的取消
unset 变量名
二.变量的类型
2.1函数级变量
在脚本中编辑函数定义变量,定义函数级变量,要加local不然默认会把函数的变量传出去函数外
2.2环境级变量
2.3用户级变量
2.4系统级变量
[root@FJWYYY ~]# vim /etc/profile
[root@FJWYYY ~]# source /etc/profile #使其配置立刻生效
2.5常见的系统变量
三..特殊变量及定义
3.1用命令的执行结果定义变量
3.2传参变量
由于脚本要接受用户命令行的输入,从命令行传递给shell脚本的参数称为位置参数,使用不同的位置变量来读取位置参数的值
[root@FJWYYY ~]# vim test1.sh
[root@FJWYYY ~]# sh test1.sh X1 X2 X3 #三个输入参数
$0 is test1.sh
$1 is X1
$2 is X2
$3 is X3
$@ is X1 X2 X3
$* is X1 X2 X3
$# is 3
3.3交互式传参变量
使用read命令进行交互式传参赋值变量
#运行命令
[root@FJWYYY ~]# read A
hello
[root@FJWYYY ~]# echo $A
hello
[root@FJWYYY ~]# read A B C
X1 X2 X3
[root@FJWYYY ~]# echo $A $B $C
X1 X2 X3
[root@FJWYYY ~]# read -a arry #-a 用来定义一个数组变量
1 2 3 4 5
[root@FJWYYY ~]# echo ${arry[@]}
1 2 3 4 5
[root@FJWYYY ~]# echo ${arry[0]}
1
[root@FJWYYY ~]# echo ${arry[-1]}
5
[root@FJWYYY ~]# echo ${#arry[*]}
5
[root@FJWYYY ~]# read -p "Please input word:" A
Please input word:123
[root@FJWYYY ~]# echo $A
123
[root@FJWYYY ~]# read -p "Please input word:" -s A
Please input word:[root@FJWYYY ~]# echo $A
456
[root@FJWYYY ~]# read -t 5 A
[root@FJWYYY ~]# read -n 5 A
12345[root@FJWYYY ~]# echo $A
12345
[root@FJWYYY ~]# read -d "." A
12345678.[root@FJWYYY ~]# echo $A
12345678
[root@FJWYYY ~]#
3.4数组变量
shell中的数组变量操作
#运行命令[root@FJWYYY ~]# A=(1 2 3 4 5)[root@FJWYYY ~]# echo $A
1
[root@FJWYYY ~]# echo ${A[*]}
1 2 3 4 5
[root@FJWYYY ~]# echo ${A[@]}
1 2 3 4 5
[root@FJWYYY ~]# echo ${A[0]}
1
[root@FJWYYY ~]# echo ${A[1]}
2
[root@FJWYYY ~]# echo ${A[-1]}
5
[root@FJWYYY ~]# echo ${A[*]:0:3}
1 2 3
[root@FJWYYY ~]# echo ${#A[*]}
5
[root@FJWYYY ~]# echo ${#A[@]}
5
[root@FJWYYY ~]# A[3]=8
[root@FJWYYY ~]# echo ${A[@]}
1 2 3 8 5
[root@FJWYYY ~]# unset A[0]
[root@FJWYYY ~]# echo ${A[@]}
2 3 8 5
[root@FJWYYY ~]#
3.5字符串变量
shell中的字符串变量操作
[root@FJWYYY ~]# a="easy/lee/test.tar.gz"
[root@FJWYYY ~]# echo ${a}
easy/lee/test.tar.gz
[root@FJWYYY ~]# echo ${#a}
20
#指定字符
[root@FJWYYY ~]# echo ${a:5}
lee/test.tar.gz
[root@FJWYYY ~]# echo ${a:1}
asy/lee/test.tar.gz
[root@FJWYYY ~]# echo ${a:0-3}
.gz
[root@FJWYYY ~]# echo ${a:5:2}
le
[root@FJWYYY ~]# echo ${a:0-3:2}
.g
[root@FJWYYY ~]# echo ${a::3}
eas
#检索删除
[root@FJWYYY ~]# echo ${a#*/}
lee/test.tar.gz
[root@FJWYYY ~]# echo ${a#/*}
easy/lee/test.tar.gz
[root@FJWYYY ~]# echo ${a##/*}
easy/lee/test.tar.gz
[root@FJWYYY ~]# echo ${a##*/}
test.tar.gz
[root@FJWYYY ~]# echo ${a%*/}
easy/lee/test.tar.gz
[root@FJWYYY ~]# echo ${a%/*}
easy/lee
[root@FJWYYY ~]# echo ${a%%/*}
easy
[root@FJWYYY ~]# echo ${a%%*/}
easy/lee/test.tar.gz
#字符替换
[root@FJWYYY ~]# echo ${a/./@}
easy/lee/test@tar.gz
[root@FJWYYY ~]# echo ${a//./@}
easy/lee/test@tar@gz
[root@FJWYYY ~]# echo ${a/./#}
easy/lee/test#tar.gz
[root@FJWYYY ~]# echo ${a//./#}
easy/lee/test#tar#gz
[root@FJWYYY ~]# echo ${a#}
easy#lee#test.tar.gz
[root@FJWYYY ~]# echo ${a///#}
easy/lee/test.tar.gz
[root@FJWYYY ~]# echo ${a/\//#}
easy#lee/test.tar.gz
四.shell脚本中的函数
脚本中的函数也可寓为脚本中的脚本
以下是一个更换颜色的脚本,没有运用到函数
以下是用了函数的更换颜色的脚本
以下是一个交互式的输入脚本,做到了无限循环
五.shell中的运算
shell中的运算命令