目录
1:变量初识
2:预定义变量
3:基本数据类型
4:变量值操作
1:变量初识
顾名思义,变量的定义就是可变的。与其他编程语言的定义是一样的,我就不多说了。(包括它的命名规则)
变量的获取方法有三种:
(1)直接赋值法
name="jkjk"
echo $name;
这里的输出我们用到的是$符号,代表引用值。
(2)从脚本参数获取,即从命令获取
$0 代表第一个值(这里的第一个值一般都是脚本名字)
$1 代表第二个值(一般这才是真正意义上的第一个值)
$2 第三
$3 第四
...
${10}
...
echo "该脚本的名称是$0";
ehcho "获取的第一个值=$1";
(3)与用户交互获取变量,即从键盘获取
read -p "请输入:" name
#输入的变量会存储到name中
read -p "请输入" -t 5 -n 2 name
这里的-t 5 表示持续五秒命令,五秒后退出交互
这里的-n 2 表示最多接受两个字符,多出的话自动退出交互
如:写个用户名和密码匹配的小脚本
2:预定义变量
$* 获取所有的位置参数
$@ 获取所有的位置参数
$# 获取位置参数的个数
$$ 获取当前shell进程的pid
$? 获取上条执行命令的成功状态,0表示执行成功,非0表示失败
3:基本数据类型
整型,浮点型,字符串型这些应该很好理解吧,跟你学过的那些编程语言的里面的数据类型其实都是一样的,这里我着重说的是数组类型,shell里面的数组类型,包括了普通数组类型和关联数组类型。
(1)普通数组
定义普通数组,有两种办法
(1)定义的同时复制
hobby=("jk" "oi" "sugd")
(2)先定义,再赋值
declare -a arrt
arrt[0]="aad"
arrt[1]="oop"
arr[t]="nks"
(2)关联数组
关联数组,嗯....如果你学过c++,那么他和里面的map容器有点类似。
比如说这个例子,一个人的姓名,年龄,性别等我们该如何存取
关联数组的定义
declare -A +数组名
4:变量值操作
1:获取变量值的长度
x='hello'
echo ${#x}
输出的是:5(是这个字符串hello的长度)
2:切片
切片的定义,学过Python,应该很容易理解
x="hello123"
echo ${x:1:3}
输出:ell
3:截断
url="www.snaa.com.cn"
截断需要用到,#(从左开始截取),%(从右开始截取)
echo ${url#www.}
输出:snaa.com.cn
echo ${url#*.}
输出:snaa.com.cn(默认情况不贪婪,第一个就行)
echo ${url##*.}
输出: cn(两个#表示贪婪)
%从右开始的做法与#相同
4:内容的替换
url="www.snaa.com.cn"
echo ${url/snaa/baidu}
输出:www.baidu.com.cn
url="www.snaa.com.cn"
echo ${url/c/C}
输出:www.snaa.Com.cn(他默认情况下也是不贪的,只是第一个c变大写)
echo ${url//c/C}
输出:www.snaa.Com.Cn
5:变量的替代
(1)${x-临时名称}
未定义时,输出的是临时名称,如果定义的是个空变量,那也是定义了,输出的就是空变量
(2)${x:-临时名称}
当变量未定义或者为空时,都会输出临时变量名称
(3)${x:=新值}
当变量未被定义或者为空时,将变量赋给一个新的值
(4)${x:?提示信息}
当变量为空或者未被定义时返回一个提示信息
(5)${x:+提示}
x没有值,啥也不管,有值的时候,才会输出提示