2.shell语法:shell变量定义和使用

目录

 

1.shell变量:Shell变量的定义、删除变量、只读变量、变量类型

1.1 变量类型

1.2定义变量

1.3 使用变量

1.4只读变量和删除修改变量

1.5 变量作用域


1.shell变量:Shell变量的定义、删除变量、只读变量、变量类型

1.1 变量类型

变量是任何一种编程语言都必不可少的组成部分,变量用来存放各种数据。脚本语言在定义变量时通常不需要指明类型,直接赋值就可以,Shell 变量也遵循这个规则

字符串是shell编程中最常用最有用的数据类型(除了数字和字符串,也没啥其它类型可用了)

在 Bash shell 中,每一个变量的值都是字符串,无论你给变量赋值时有没有使用引号,值都会以字符串的形式存储。
这意味着,Bash shell 在默认情况下不会区分变量类型,即使你将整数和小数赋值给变量,它们也会被视为字符串,这一点和大部分的编程语言不同。例如在 C/C++ 中,变量分为整数、小数、字符串、布尔等多种类型。当然,如果有必要,你也可以使用 declare 关键字显式定义变量的类型,但在一般情况下没有这个需求,Shell 开发者在编写代码时自行注意值的类型即可。

1.2定义变量

Shell 支持以下三种定义变量的方式:

变量名=变量值
variable='变量值'//原样输出 变量和命令,命令需要反引,一般不这么做,而是用$(包含命令的语句)
variable="变量值"

注意,赋值号的周围不能有空格,这可能和你熟悉的大部分编程语言都不一样。

variable 是变量名,value 是赋给变量的值。如果 value 不包含任何空白符(例如空格、Tab缩进等),那么可以不使用引号;如果 value 包含了空白符,那么就必须使用引号包围起来。


Shell 变量的命名规范和大部分编程语言都一样:

变量名由数字、字母、下划线组成;

必须以字母或者下划线开头;

不能使用 Shell 里的关键字(通过 help 命令可以查看保留关键字)。

1.3 使用变量

使用变量时才能加$变量名  或者${变量名} 推荐后者,这样的话有边界

eg:

  1. url=http://c.biancheng.net
  2. echo $url
  3. name='C语言中文网'
  4. echo $name
  5. author="严长生"
  6. echo $author

1.4只读变量和删除修改变量

只读变量 变量名

删除变量

使用 unset 命令可以删除变量。语法:

  1. unset variable_name

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

1.5 变量作用域

变量类型

运行shell时,会同时存在三种变量:

1) 局部变量

局部变量在脚本或命令中定义,仅在当前shell实例中有效,其他shell启动的程序不能访问局部变量。

要想变量的作用域仅限于函数内部,可以在定义时加上local命令,此时该变量就成了局部变量.

Shell 变量的这个特性和 JavaScript 中的变量是类似的。在 JavaScript 函数内部定义的变量,默认也是全局变量,只有加上var关键字,它才会变成局部变量。

2)全局变量

所谓全局变量,就是指变量在当前的整个 Shell 进程中都有效。每个 Shell 进程都有自己的作用域,彼此之间互不影响。在 Shell 中定义的变量,默认就是全局变量。

需要强调的是,全局变量的作用范围是当前的 Shell 进程,而不是当前的 Shell 脚本文件,它们是不同的概念。打开一个 Shell 窗口就创建了一个 Shell 进程,打开多个 Shell 窗口就创建了多个 Shell 进程,每个 Shell 进程都是独立的,拥有不同的进程 ID。在一个 Shell 进程中可以使用 source 命令执行多个 Shell 脚本文件,此时全局变量在这些脚本文件中都有效。

2) 环境变量

所有的程序,包括shell启动的程序,都能访问环境变量,有些程序需要环境变量来保证其正常运行。必要的时候shell脚本也可以定义环境变量。

全局变量只在当前 Shell 进程中有效,对其它 Shell 进程和子进程都无效。如果使用export命令将全局变量导出,那么它就在所有的子进程中也有效了,这称为“环境变量”。

环境变量被创建时所处的 Shell 进程称为父进程,如果在父进程中再创建一个新的进程来执行 Shell 命令,那么这个新的进程被称作 Shell 子进程。当 Shell 子进程产生时,它会继承父进程的环境变量为自己所用,所以说环境变量可从父进程传给子进程。不难理解,环境变量还可以传递给孙进程。

注意,两个没有父子关系的 Shell 进程是不能传递环境变量的,并且环境变量只能向下传递而不能向上传递,即“传子不传父”。

创建 Shell 子进程最简单的方式是运行 bash 命令,如图所示。2.shell语法:shell变量定义和使用_第1张图片通过exit命令可以一层一层地退出 Shell。

3) shell变量

shell变量是由shell程序设置的特殊变量。shell变量中有一部分是环境变量,有一部分是局部变量,这些变量保证了shell的正常运行;

如果我想让一个变量在所有 Shell 进程中都有效,不管它们之间是否存在父子关系,该怎么办呢?

只有将变量写入 Shell 配置文件中才能达到这个目的!Shell 进程每次启动时都会执行配置文件中的代码做一些初始化工作,如果将变量放在配置文件中,那么每次启动进程都会定义这个变量。需要学习下shell配置文件的加载以及如何定义自己的shell配置文件(脚本)。

你可能感兴趣的:(语言篇-shell编程)