关于shell:shell脚本编程学习笔记变量

N年前灵机一动把鸟哥linux私房菜一顿学,后果时隔多年功力尽散,事实证明进入工作后,最高效的学习形式还是围绕面临的问题去学习。当然也不是说不必做技术储备,拓宽技术面是必要,但要系统性学习一门技术,最好是用来解决眼下的问题。
最近开始接触ci,发现外面的shell脚本都能看得懂,但要想优化革新就犯难了。须要从新对shell script做个梳理。

shell变量

变量申明

key="value"
  • 与很多其余语言不同,等号左右不能有空格。
  • 变量名称只能应用英文字母,数字和下划线,首个字符不能以数字结尾。

变量应用

应用一个曾经被定义过的变量时,在变量名前加 $ 符号,能够用{}蕴含变量名。

name="George"

# $变量名
echo "my name is $name"

prefix="foot"

# ${变量名}
echo "i like play ${prefix}ball"

{}是为了帮忙解释器辨认变量的边界。作为最佳实际,能够为所有变量加上${}

字符串变量

shell变量最罕用的数据类型就是字符串。另一种是数组,前面再介绍。
对变量赋值字符串时,反对应用双引号、单引号,也能够不加引号。

能够应用其余变量值对变量赋值

name=George
alias=${name}

当变量值中须要蕴含空格时,须要用引号(单双引号都反对)括起来。不加括号时shell执行会报错。

t1="this is a nice day"
t2='yes,it is'

# 以下shell执行时会报错 info: command not found。因为shell会把空格后的info当成指令执行
t3=error info

shell定义字符串变量时是反对拼接的,只有各个字符串值之间没有空格。

t1="hi there"

# 尽管shell能失常运行以下代码,但可读性太差。
t2=${t1},this" is mike"

# 以下代码具备更强的可读性。
t2="${t1},this is mike"

双引号中能够应用${}援用指定变量。而在单引号中,任何字符都会原样输入。

t1="hi there"
t2="${t1},this is mike"
t3='${t1},this is mike'

以上t2的理论值为”hi there,this is mike”,而t3的值为”${t1},this is mike”。
在双引号中,能够通过转译字符 \ 实现单引号雷同性能

t1="hi there"
t2="\${t1},this is mike"

倡议对立应用双引号。

获取字符串长度

name="George"

# 应用`${#变量名}`获取变量属性值的长度
echo ${#name}

字符串截位

t1="it's a good day"

# 应用${变量名:from:length}获取从from开始,长度为length的字符串
# 以下实例从字符串第 7 个字符开始截取 4 个字符,后果就是"good"
echo ${t1:7:4}

数组变量

用括号来示意数组,数组元素用“空格”符号或“回车”宰割开。还能够独自定义数组的各个重量。

array1=("value0" "value1" "value2" "value3")

array2=(
"v0"
"v1"
"v2"
)

array2[3]="v3"
array2[4]="v4"

读取数组

# ${数组名[下标]}
echo ${array1[0]}

# 应用 [@] 或 [*] 符号能够获取数组中的所有元素
echo ${array1[@]}
echo ${array2[*]}

数组的长度

获取数组长度的办法与获取字符串长度的办法雷同

array=(0 1 2 3 4)

# 应用`${#数组变量名[@]}`获取数组长度
echo ${#array[@]}

一维数组

shell只反对一维数组(不反对多维数组)

arr1=(1 2 3 4)
arr2=(5 6 7 8)

# 以下代码并不是构建一个二维数组,而是将两个数组打平后拼接在一起。
arr=(${arr1[@]} ${arr2[@]})

# arr理论值为 1 2 3 4 5 6 7 8
echo ${arr[@]}

# arr长度为 8
echo ${#arr[@]}

只读变量

name="George"
readonly name
name="Carol"
echo ${name}

通过readonly可将指定变量设置为只读。下面一段shell执行到第三行时,会提醒谬误:err.sh: line 3: name: readonly variable。

删除字段

unset var_name

变量被删除后不能再次应用。unset 命令不能删除只读变量。

参考资料
https://www.runoob.com/linux/linux-shell-variable.html

评论

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

这个站点使用 Akismet 来减少垃圾评论。了解你的评论数据如何被处理