Shell编程从入门到精通——变量和引用

一、认识变量

1.1 什么是变量

顾名思义,变量就是程序设计语言中的一个可以变化的量,当然,可以变化的是变量的值。

1.2 变量的命名

在Shell中,变量名可以由字母、数字或者下划线组成,并且只能以字母数字或者下划线开头,变量名的长度并不做限制,但是为了提高程序的可读性,建议用户使用相对较短的字符串作为变量名。在通常情况下,变量名应该由有明确的含义的英文单词组成,这样,用户通过变量名就可以了解变量的作用。

1.3 变量的类型

在Shell中变量的类型无需显示的声明,变量的数据类型会根据不同的操作有所变化。

1.4 变量的定义

【1】 直接定义

#! /bin/bash
#定义变量a
a=1
#定义变量b
b="hello"
#定义变量c
c="hello world"

【2】使用declare声明

declare的语法如为:declare attribute variable
其中attribute表示变量的属性,常用的属性如下:

属性 含义
-p 显示所有变量的值。
-i 将变量定义为整数。在之后就可以直接对表达式求值,结果只能是整数。如果求值结果失败或者不是整数,就设置为0
-r 将变量声明为只读变量。
-a 变量声明为数组变量,在shell中所有的变量都是数组,赋值给没有下标的变量与赋值给下标为0的数组元素相同。
-f 显示所有自定义函数,包括名称和函数体。
-x 将变量设置为环境变量,这样在随后的脚本和程序中就可以使用了。
#! /bin/bash
declare -i x
#将算术式赋值给变量x
x=6/3
echo ${x}
#取消变量x的整数属性
declare +x x
x=3.14
echo ${x}

1.5 变量和引号

【1】单引号(’’)

单引号括起来的字符都作为普通字符出现。

【2】双引号("")

用双引号括起来的字符,除“$”、“\”、"'"和““”这几个字符仍是特殊字符并保留其特殊功能,其余字符作为普通字符对待。

【3】反引号(``)

被反引号括起来的字符串被shell解释为命令,在执行时,shell首先执行该命令,并以标准输出结果取代整个反引号部分。
#! /bin/bash
#输出当前目录
echo "Current directory is `pwd`"

1.6 变量的作用域

【1】全局变量
在Shell中全局变量可以在脚本中定义也可以在函数中定义。在脚本中定义的变量都是全局变量,其作用域为从被定义的地方开始,一直到shell脚本结束或者被显式的删除。

#! /bin/bash

#定义函数
func()
{
  #输出变量的值
  echo "$v1"
  #修改变量x的值
  v1=200
}
#在脚本中定义变量x
v1=100
#调用函数
func
#输出变量x的值
echo "$v1"

【2】局部变量
在shell中,可以在函数内部通过local关键字定义局部变量,另外,函数的参数也是局部变量。

#!/bin/bash
#定义函数
func()
{
  #使用local定义局部变量
  local v2=100
}
#调用函数
func
#输出变量的值
echo "$v2"

1.7 系统变量

变量 说明
$n n是一个整数,从1开始,表示参数的位置,例如$1便是第一个参数。
$# 命令行参数的个数
$0 当前shell脚本的名称
$? 前一个命令或者函数的返回状态码
$* 以”参数1 参数2“…的形式将所有的参数通过一个字符串返回
$@ 以”参数1“ ”参数2“…的形式返回每个参数
$$ 返回本程序的进程ID

1.8 环境变量

常用的变量如下,你也可以通过set命令获取所有环境变量。

变量 说明
PATH 命令搜索路径,以冒号作为分隔符。
HOME 用户主路经的路径名,是cd命令的默认参数。
IFS 定义shell使用的分隔符
LOGNAME 当前的登录名。
SHELL shell的全路径名
TERM 终端类型
TMOUT Shell自动退出的时间,单位为秒,若设置为0则禁止SHELL自动退出
PWD 当前工作目录

二、变量的赋值和清空

2.1 变量的赋值

赋值语法为:variable_name=value
中间的等于号为赋值符号,赋值符号的左右两边不能直接跟空格,否则shell会将其视为命令。

2.2 变量的引用

在shell中,用户可以通过在变量名前加”$“来获取该变量的值。 为了使Shell能够正确的界定变量名,避免混淆,用户引用变量时可以使用大括号将变量括起来,如下:

echo "${v1}abc"

2.3 清除变量

清除变量使用unset命令,用法如下:unset variable_name

三、引用和替换

3.1 引用

所谓引用就是将字符串使用引用符号括起来,以防止其中的特殊字符被Shell解释为其他含义。
Shell中一共有四种引用符号如下表:

引用符号 说明
双引号 除美元符号、单引号、反引号和反斜线外,其他所有字符都保持字面意义。
单引号 所有字符都保持字面意义
反引号 反引号中的字符串将被解释为Shell命令
反斜线 转义字符,屏蔽后面字符的特殊含义

3.2 全引用

因为被单引号括起来的字符串都保持其字面意义,因此这种引用方式被称为全引用。

#!/bin/bash
v1="Hello World!"
#输出含有变量名的字符串
echo 'This is $v1'

3.3 部分引用

因为双引号括起来的字符,其中包含的字符除美元符号、反引号以及斜线外的所有字符都被解释为字面意义,因此也称为部分引用。

#!/bin/bash
v1="Hello World!"
#输出含有变量名的字符串
echo "This is $v1"

3.4 命令替换

所谓命令替换就是在Shell程序中,将某个Shell命令执行结果赋值给某个变量。在bash中有两种方式可以用来进行命令替换,分别是反引号和圆括号:
shell_command
$(shell_command)

#! /bin/bash
v1=`pwd`
v2=$(pwd)
echo "v1 = $v1"
echo "v2 = $v2"

3.5 转义

转义就是转换某些特殊字符的意义。转义使用反斜线表示,当反斜线后面的一个字符具有特殊意义时,反斜线将屏蔽该字符的特殊意义。

#! /bin/bash
echo $(pwd)
echo \$(pwd)

猜你喜欢

转载自blog.csdn.net/random_w/article/details/106108238