1、变量
在几乎所有的计算机语言中都有变量,shell脚本开发中也有变量,它是指在一个过程中可以指定变化的量
1.1、变量的定义
shell脚本中定义变量时,变量名不加美元符号$,不同于PHP语言,
hello="hellp world"
注意,变量名和等号之间不能有空格,变量名定义时需要遵循相关的规则(同python等其它语言)
1.2、变量的使用
shell脚本中使用一个已经定义过的变量时,需要在变量名前面添加美元符号$,如:
#!/bin/bash
hello="hello world"
echo $hell0
当然,可以使用花括号将变量名括起来,告诉解释器是一个变量,这在一些特殊的地方很好用。例如:
for item in "one two three"
echo "${item}_apple"
此时使用花括号是最好的选择,防止解释器区分不了变量的边界
1.3、只读变量
在python等计算机语言中,有常量,在shell脚本中可以定义只读变量,表示该变量一旦定义,后续操作只能进行读操作,不能进行写操作 。使用readonly进行指定,如:
#!/bin/bash
myUrl="https://www.google.com"
readonly myUrl
myUrl="https://www.baidu.com"
运行脚本会出现错误提示,表示该变量为 read only
1.4、删除变量
对于变量的释放,即删除,则使用unset关键字,注意两点(1、只读变量不可进行删除。2、删除后变量无法使用,即不存在)
#!/bin/sh
name="zhangsan"
unset name
echo $name
运行后不会出现任何输出
1.5、变量的类型
shell脚本中会涉及到局部变量、环境变量和shell变量
- 局部变量:在脚本或命令中定义,仅在当前shell实例中有效,其他shell启动的程序不能访问局部变量。
- 环境变量:所有的程序,包括shell启动的程序,都能访问环境变量,有些程序需要环境变量来保证其正常运行。必要的时候shell脚本也可以定义环境变量。
- shell变量:shell中的特殊变量,为保证shell的正常运行而定义,一部分为局部变量,一部分为环境变量
2、shell字符串
shell脚本中最常用的就是字符串和数字,可以使用单引号‘’,双引号“”及不用引号
2.1、字符串的定义
#!/bin/bash
one='one'
two="two"
three=something
拼接字符串
#!/bin/bash
one="one"
# 使用双引号拼接
greeting="hello, "$one" !"
greeting_1="hello, ${one} !"
echo $greeting $greeting_1
# 使用单引号拼接
greeting_2='hello, '$one' !'
greeting_3='hello, ${one} !'
echo $greeting_2 $greeting_3
输出结果为
hello, one ! hello, one !
hello, one ! hello, ${one} !
获取字符串长度
#!/bin/bash
one="hello world"
echo ${#one} # 输出11
read -n 1 # 确保界面不退出
提取子字符串
以下实例从字符串第 3 个字符开始截取 5 个字符:
格式:${变量名:索引位置:截取个数}
#!/bin/bash
one="hello world"
echo ${one:2:5} # 输出llo w,空格也会被打印
read -n 1 # 确保界面不退出
注意:第一个索引位置为0
查找子字符串
查找字符 l 的位置(查找到的第一个值的位置):
#!/bin/bash
one="hello world"
echo `expr index "$one" l` # 输出3,此时输出的并非索引
read -n 1 # 确保界面不退出
注意:` 是反引号,而不是单引号 '
3、shell脚本数组
对于shell脚本中的数组来说,与c语言中的数组基本一致,可以定义数字数组、字符串数组等
3.1、数组的定义
数组的定义分为三种:
①使用空格符分开
②使用回车符分开
③利用索引直接进行定义
#!/bin/bash
# 定义数组
# 使用空格分开
two=(value0 value1 value2 value3)
one=(1 2 3 4)
# 使用回车符分开
three=(
1
2
3
4
)
# 直接进行定义
four[0]=1
four[1]=2
four[2]=3
four[3]=4
读取数组
读取数组元素值的一般格式是:${数组名[下标]},与变量一致,获取时需要加美元符号$,数组名指的是数组的第一个元素,需要哪个元素要指定相应的索引位置,如:
#!/bin/bash
one=(1 2 3 4)
echo "使用数组名输出$one"
echo "使用数组名输出${one}"
# 指定数组索引
echo "指定数组索引输出${one[1]}"
read -n 1
注意:此处输出使用双引号"",单双引号输出有何不同可以自己试试
输出如下:
使用数组名输出1
使用数组名输出1
指定数组索引输出2
对于整个数组的输出,可以进行遍历,此处初步介绍一下printf,类似c语言中printf()函数,shell脚本中也有类似命令printf,作用与echo命令一致,唯一不同在于echo输出时会自动输出回车符,printf则不会自动输出回车
#!/bin/bash
# @Author: admin
# @Date: 2021-04-26 17:27:56
# @Last Modified by: admin
# @Last Modified time: 2021-04-27 09:55:41
one=(