shell变量类型

一、定义一个变量

shell在定义变量的时候,变量名与变量之间不能存在空格,这个大多数的语言的这个不同还是蛮大的,不过定义的规则就其他的语言定义的规则大致相同了。
使用变量

使用一个已经定义过的变量,只需要在变量的名字前加$,例如下面的例子。
在使用变量额时候

[root@n7 ~]# cat test.sh
#!/bin/bash
line=”hello world”
echo $line
echo ${line}  #可以的添加一个{},添加一个边界,更加的醒目,好理解
[root@n7 ~]# sh test.sh
hello world
hello world

1、只读变量 readonly

在变量的前面 添加readonly把变量定义为一个只能读取的变量,无法进行修改。

[root@n7 ~]# cat test2.sh
#!/bin/bash
name=”fencatn”
readonly name
name=”test”
echo $name
[root@n7 ~]# sh test2.sh
test2.sh: line 4: name: readonly variable
#这里就是为了让大家看这个输出报错,提示是一个只读变量

2、删除变量unset

使用unset定义一个变量,变量的内容就被删除了。

[root@n7 ~]# cat test3.sh
#!/bin/bash
name=”fencatn”
echo “1-$name”
unset name
echo “2-$name”
[root@n7 ~]# sh test3.sh
1-fencatn
2-
[root@n7 ~]#

注意看第2个变量没输出,因为被取消定义了

shell变量的类型

和其他的语言中一样,shell中的变量也是分为不同的类型的。
– 全局变量(环境变量)
– 局部变量(普通变量)

3、全局变量(环境变量)

在Linux中,内置了一些环境变量,如HOME,PATH,SHELL,UID,GID,HOSTNAME等,可以通过命令env显示所有的环境变量。

[root@n7 ~]# echo $HOME
/root
[root@n7 ~]#

定义环境变量

用户也可以根据自己的需要定义自己的环境变量(全局变量),定义环境变量的方法:

export variable_name=value
#or
variable_name=value
export variable_name

举个例子:

export NAME=idealcitier

[root@n7 ~]# export website=fencatn.com
[root@n7 ~]# env | grep website
website=fencatn.com

可以看出,定义的环境变量,成功了。
对环境变量进行操作

可以使用echo对环境变量进行显示。
[root@n7 ~]# echo $website
fencatn.com

利用env,显示所有的环境变量。
[root@n7 ~]# env
XDG_SESSION_ID=1
HOSTNAME=n7
TERM=xterm
SHELL=/bin/bash
HISTSIZE=1000
SSH_CLIENT=192.168.0.15 51152 22
SSH_TTY=/dev/pts/0
USER=root

清除环境变量unset

[root@n7 ~]# export website=fencatn.com
[root@n7 ~]# echo $website
fencatn.com
[root@n7 ~]# unset website
[root@n7 ~]# echo $website

[root@n7 ~]#

4、普通变量

环境变量一般在脚本或命令中进行定义,只在当前的shell中有效,其他启动的shell这个变量是无效的。

variable_name=name

 

二、shell字符串

字符串使用单引号”和双引号””。
1、单引号

单引号中所有的字符都是原样的输出,也就是说单引号中的变量是无效的。
单引号中无能再出现单引号了,对转移符也无效

2、双引号

双引号中可以有变量
可以使用转移符

[root@n7 ~]# str=’name is fencatn’
[root@n7 ~]# echo “my $str”
my name is fencatn
[root@n7 ~]# echo ‘my $str’
my $str
[root@n7 ~]#

3、拼接字符串

[root@n7 ~]# name=’fencatn’
[root@n7 ~]# age=’18’
[root@n7 ~]# list1=”hello,my name is $name”
[root@n7 ~]# list2=”my age is $age”
[root@n7 ~]# echo “$list1 , $list2”
hello,my name is fencatn , my age is 18
[root@n7 ~]#

4、获取字符串长度

[root@n7 ~]# test=”akjdflkjsaf”
[root@n7 ~]# echo ${#test}
11
[root@n7 ~]#

4、提取子字符串

以下实例从字符串第 2 个字符开始截取 4 个字符:

[root@n7 ~]# test2=”my name is fencatn”
[root@n7 ~]# echo ${test2:3:7}
name is
[root@n7 ~]#

6、查找子字符串

查找字符 “i 或 s” 的位置:

[root@n7 ~]# test2=”my name is fencatn”
[root@n7 ~]# echo `expr index “$test2” n`
4
[root@n7 ~]# echo `expr index “$test2” s`
10
[root@n7 ~]# echo `expr index “$test2” is`
9
[root@n7 ~]#

 

三、shell数组

支持一维数组(不支持多维数组),并且没有限定数组的大小。
类似与C语言,数组元素的下标由0开始编号。获取数组中的元素要利用下标,下标可以是整数或算术表达式,其值应大于或等于0。
定义数组

在Shell中,用括号来表示数组,数组元素用”空格”符号分割开。定义数组的一般形式为:
数组名=(值1 值2 … 值n)

array_name=(value0 value1 value2 value3)

or

array_name=(
value0
value1
value2
value3
)

还可以单独定义数组的各个分量:

array_name[0]=value0
array_name[1]=value1
array_name[n]=valuen

可以不使用连续的下标,而且下标的范围没有限制。
读取数组

读取数组元素值的一般格式是:
${数组名[下标]},也就是valuen=${array_name[n]}

使用@符号可以获取数组中的所有元素,例如:

echo ${array_name[@]}

获取数组的长度

获取数组长度的方法与获取字符串长度的方法相同,例如:
取得数组元素的个数

length=${#array_name[@]}

or

length=${#array_name[*]}

取得数组单个元素的长度

lengthn=${#array_name[n]}

本文参考http://www.runoob.com/linux/linux-shell-variable.html

此条目发表在shell分类目录,贴了标签。将固定链接加入收藏夹。

发表回复

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