shell变量的定义和类型

shell 变量

定义变量

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

使用变量

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

#!/bin/bash
# filename: test.sh
# 2017-10-22 20:46:42

line="Hello world"
echo $line
# echo ${line} #可以的添加一个{},添加一个边界,更加的醒目,好理解
leeguo@leeguo-PC:~/Nutstore/Shell_code$ sh test.sh
Hello world

只读变量 readonly

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

name=leeguo
readonly name
name=idealcitier
echo ${name}
#output
test.sh: 15: test.sh: name: is read only

删除变量unset

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

name=idealcitier
unset name
echo ${name}

在运行之后,是没有输出的。

shell变量的类型

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

全局变量(环境变量)

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

leeguo@leeguo-PC:~/Nutstore/Shell_code$ echo $HOME
/home/leeguo
定义环境变量

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

export  variable_name=value
#or
variable_name=value
export  variable_name

举个例子:

export NAME=idealcitier
leeguo@leeguo-PC:~/Nutstore/Shell_code$ export NAME=idealcitier
leeguo@leeguo-PC:~/Nutstore/Shell_code$ env | grep NAME
NAME=idealcitier
LOGNAME=leeguo
LC_NAME=zh_CN.UTF-8

可以看出,定义的环境变量,成功了。

对环境变量进行操作

    可以使用echo对环境变量进行显示。 shell leeguo@leeguo-PC:~/Nutstore/Shell_code$ echo $NAME idealcitier 利用env,显示所有的环境变量。 shell leeguo@leeguo-PC:~/Nutstore/Shell_code$ env LC_PAPER=zh_CN.UTF-8 XDG_VTNR=7 LC_ADDRESS=zh_CN.UTF-8 XDG_SESSION_ID=c2 TERM_PROGRAM=vscode LC_MONETARY=zh_CN.UTF-8 XDG_GREETER_DATA_DIR=/var/lib/lightdm-data/leeguo CLUTTER_IM_MODULE=xim GIO_LAUNCHED_DESKTOP_FILE_PID=11788 ... 清除环境变量unset leeguo@leeguo-PC:~/Nutstore/Shell_code$ export NAME=idealcitier leeguo@leeguo-PC:~/Nutstore/Shell_code$ echo $NAME idealcitier leeguo@leeguo-PC:~/Nutstore/Shell_code$ unset NAME leeguo@leeguo-PC:~/Nutstore/Shell_code$ echo $NAME

普通变量

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

variable_name=name

shell字符串

字符串使用单引号和双引号""。

单引号

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

双引号

    双引号中可以有变量 可以使用转移符
str=test line
echo It is a $str 

echo "It is a " $str ""
#output
It is a $str
It is a " test line "
    拼接字符串 your_name="qinjx" greeting="hello, "$your_name" !" greeting_1="hello, ${your_name} !" echo $greeting $greeting_1 获取字符串长度 string="abcd" echo ${#string} #输出 4 提取子字符串 以下实例从字符串第 2 个字符开始截取 4 个字符: string="runoob is a great site" echo ${string:1:4} # 输出 unoo 查找子字符串 查找字符 “i 或 s” 的位置: string="runoob is a great company" echo `expr index "$string" is` # 输出 8

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]}
经验分享 程序员 微信小程序 职场和发展