shell变量类型主要分为三种:一般变量、字符串、数组
一般变量(主要为数值)
局部变量
shell中定义变量的方式和python中类似,直接使用赋值符号就可以定义变量
(中间不要有空格)
shell中定义的变量默认类型为 字符串类型
a=123
引用变量的方式有两种:
- $name:常用的引用变量方法
- ${name}:当变量后面紧跟了字母或数字的时候使用,为了防止系统把整个$符号后面的字符串都解释为一个变量名字
name=dog
echo "There are many dogs"
echo "There are many $names"
echo "There are many ${name}s"
输出:
There are many dogs
There are many # 变量有误,输出为空
There are many dogs
- 注意:echo后面是双引号的时候才会解释变量,单引号的内容认为是原生字符串直接输出
由于变量默认为字符串,使用变量进行±*/%运算,有下面三种方法:
- 使用$((expression))
a=12
b=15
c=$((a+b))
echo $c #注意使用 $c 来引用变量c
27
- 使用let
a=12
b=15
let c=a+b
echo $c
27
- 使用declare -i
a=12
b=15
declare -i c=a+b
echo $c
27
只读变量:
使用readonly来创建只读变量,其值不可改变
name="dzzhyk"
readonly name
name="martin"
删除变量:
使用unset来删除变量
a=10
unset a
echo $a
# 输出为空
环境变量
定义环境变量:
export PATH_NAME=/dir/...
为了让环境变量定义生效且一直存在,可以将环境变量写入下面的两个文件的其中一个即可:
/etc/profile
/etc/bashrc
可以把自己的sh文件放在/etc/profile.d文件目录下,可以开机启动
shell变量
- $?
返回一个数字,表示上一条命令的执行情况,如果返回0代表成功,非0则失败,一般用于shell的条件判断
ifconfig eth0 | grep inet
echo $?
# echo的输出结果为0,代表上面的语句执行成功了
如果上一个命令没有得到结果或者得到否定的结果,返回的也不是0,例如:
systemctl status firewalld # 假设防火墙已经关闭
返回inactive
使用$?得到的结果是3
- $RANDOM
生成4~5位随机整数
echo $RANDOM
1213
shell字符串
字符串可以用双引号、单引号,也可以不用引号
单引号
echo '单引号'
- 单引号里面不解释变量,按照原样输出
- 单引号里面不能出现单个单引号,但是可以成对出现(字符串的拼接)
echo 'abc'def'ghi'
abcdefghi
双引号
echo "双引号"
- 双引号内解释变量,如果变量不存在就会输出空
- 双引号内部不能出现多个双引号,但是可以成对出现,也是拼接字符串
echo "abc"def"ghi"
abcdefghi
获取字符串长度
str="dzzhyk"
echo "${#str}"
6
提取子字符串
从索引1位置开始往后取3个字符
str="dzzhyk"
echo "${str:1:3}"
zzh
shell数组
shell数组的下标范围是0~n
创建数组
array=(1 2 3 4 5)
array[0]=1
array[2]=2
array[100]=99 # 可以使用非连续下标创建数组,没有限制
使用数组元素
echo "${array[1]}"
2
使用@或*符号可以获取数组中的所有下标
echo "${array[@]}"
echo "${array[*]}"
1 2 3 4 5
获取数组的长度
echo "#${array[*]}"
5
获取数组中某个元素的长度:标注特定的下标即可
echo "#${array[2]}"
1