shell学习:变量/字符串/数组

shell即是一种命令语言,也是一种程序设计语言
shell是一个应用程序并提供了一个界面,通过这个界面用户可以访问操作系统内核的服务

变量

变量类型

shell中存在三种变量类型

  1. 局部变量 局部变量在脚本或命令中定义,仅在当前shell实例中有效,其他shell启动的程序不能访问局部变量。
  2. 环境变量 所有的程序,包括shell启动的程序,都能访问环境变量,有些程序需要环境变量来保证其正常运行。必要的时候shell脚本也可以定义环境变量。
  3. shell变量 shell变量是由shell程序设置的特殊变量。shell变量中有一部分是环境变量,有一部分是局部变量,这些变量保证了shell的正常运行

定义变量

定义变量时的限制规则

  1. 首个字符为字母(大小写不做限制)
  2. 中间不能有空格,可以使用下划线
  3. 不能使用标点符号
  4. 不能使用bash中的关键字
  5. 变量名与等号之间不能有空格
name="ming"

如何使用变量

在变量前面加上美元符$

name="ming"
echo $name
# ming

当需要限制边界时(告诉解释器内个是变量),需要使用{}将变量包围起来

name="ming"
echo "my name is ${name}"
# my name is ming

设置只读变量

使用readonly命令将变量定义为只读变量

name=ming
readonly name

删除变量

使用unset命令

  • unset命令不能删除只读变量
name=ming
unset name

shell字符串

对于字符串变量在定义时

  • 可以直接跟=号
name=ming
echo $name
# ming
  • 可以使用单引号
  1. 单引号中的任何字符都会原样输出,单引号字符串中的变量是无效的
  2. 单引号字符串中不可以出现单引号
name=ming
echo $name
# ming
  • 也可以使用双引号
  1. 双引号字符串可以存在变量
  2. 双引号字符串中可以出现转义字符
name="ming"
echo $name
# ming

拼接字符串

定义新字符串时可以直接拼接之前定义的字符串

name=ming
# 第一种方法
new_name_one="hello,"$name""
# 第二种方法
new_name_two="happy,${name}"

关于字符串的常用方法

获取字符拆长度

name=ming
echo ${#name}

截取字符串

  1. 从左边开始截取
name=hello,ming
echo ${name:0:4}
  1. 从右边开始截取
    注意:从右边开始截取时,计数从1开始
${string:0-start:length}
  1. 从指定字符开始截取(结束位置为字符串结尾)
    使用#截取指定字符(子字符串右边所有字符
${string#*chars}

如果不需要忽略指定字符左边内容则可以去掉*

${string#chars}

需要获取左边所有字符时可以使用%
用法和上面一样

${string%chars*}

查找字符串

注意:查找字符串使用的是反引号 `

name="hello ming"
echo `expr index "$name" ming`

shell数组

bash只支持一维数组,不限制数组大小,数组下标从0开始,下标可以为整数或者算数表达式(>=0)

定义数组

通过括号来表示数组,数组中的元素用空格分割

  • 注意数组下标可以不连续
数组名=(值1 值2 ...)
array_name=(v0 v1 v2)

或者

array_name[0]=v0
array_name[1]=v1
array_name[2]=v2
array_name[5]=v5 # 数组下标可以不连续

读取数组

读取数组格式

${数组名[下标]}
value=${array_name[0]}
  • 使用 @可以获取数组中所有元素
echo "${array_name[@]}"
array_name=(v0 v1 v2)
echo "${array_name[@]}"

获取数组元素个数

使用 @ 或者 * 可以获取数组中的所有元素

length=${#array_name[@]}
# 或者
length=${#array_name[*]}
array_name=(v0 v1 v2)
echo "${array_name[@]}"
echo "${array_name[*]}"

获取数组长度

与上面获取字符串长度方法相同

array_name=(v0 v1 v2)
echo "${array_name[*]}"
echo "${array_name[@]}"

获取数组单个元素长度

length=${#array_name[n]} # n为下标

删除数组

使用unset删除数组

array_name=(1 2 3)
unset array_name[0]
unset array_name

数组截取

使用${array[@]:n:m}获取数组子串,如果没有M则从下标n位置至末尾

array_name=(1 2 3)
echo ${array_name:0:2}
echo ${array_name:0}

关联数组

普通数组只能使用整数作为数组的索引,而关联数组则使用字符串作为数组的索引,所以关联数组也称作键值对数组,key-字符串形式的数组下标,value-元素值
通过declare -A 命令创建关联数组

declare -A name
name["a"]=1
name["b"]=2
name["c"]=3

或者

declare -A name=(["a"]=1,["b"]=2,["c"]=3)

访问关联数组操作和普通数组一样

echo ${name[@]}
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值