目录

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 命令,如图所示。通过exit命令可以一层一层地退出 Shell。

3) shell变量

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

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

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

2.shell语法:shell变量定义和使用相关推荐

  1. (二)shell编程之变量定义与使用

    shell编程之变量定义与使用 SHELL编程模块课程目标 ① Shell的基本语法结构 如:变量定义.条件判断.循环语句(for.until.while).分支语句.函数和数组等: ② 基本正则表达 ...

  2. SHELL编程之变量定义

    SHELL编程 学习前奏 1. 文件处理工具 1.1 grep工具 1.2 cut工具 1.3 sort工具 1.4 uniq工具 1.5 tee工具 1.6 paste工具 1.7 tr工具 小试牛 ...

  3. Linux shell编程(二):shell语法

    shell 语法 shell 执行命令操作 当shell读取输入时,它将执行一系列操作.如果输入表示注释的开头,则shell将忽略注释符号('#')和该行的其余部分. shell 读取和执行命令时将经 ...

  4. c语言中文网严长生,2.shell语法:shell变量定义和使用

    目录 1.shell变量:Shell变量的定义.删除变量.只读变量.变量类型 1.1 变量类型 1.2定义变量 1.3 使用变量 1.4只读变量和删除修改变量 1.5 变量作用域 1.shell变量: ...

  5. Shell程序设计 | 基本语法 :变量、I/O、算术运算、条件判断、流程控制、函数

    文章目录 变量 环境变量 位置变量 特殊变量 自定义变量 数组 I/O printf / echo read 算术运算 let expr 条件判断 test 常用判断条件 流程控制 if case f ...

  6. linux文件的定义变量的值,linux shell 自定义函数方法(定义、返回值、变量作用域)...

    一.定义shell函数(define function) 语法: [ function ] funname [()] { action; [return int;] } 说明: 1.可以带functi ...

  7. linux shell 引号 参数,shell(三)变量,基本语法,单双引号

    shell中的变量 变量的声明:在shell中变量不需要事先声明,不必显示声明 变量的赋值:VAR=value,不允许有空格.如:a=100 变量的数据类型:shell中的变量无数据(弱)类型!同一变 ...

  8. 【Note4】shell语法,ssh/build/scp/upgrade,环境变量,自动升级bmc,bmc_wtd,peci,软连接

    文章目录 1.shell语法:Shell是用C语言编写的程序,它是用户使用Linux的桥梁,硬件>内核(os)>shell>文件系统 1.1 变量:readonly定义只读变量,un ...

  9. shell中文件路径用变量定义_shell学习笔记01(概述amp;变量)

    Shell概述 为什么要学习Shell呢? 因为有用. Shell脚本入门 1.脚本格式 脚本以#!/bin/bash开头(指定解析器) 2.第一个Shell脚本:helloworld (1)需求:创 ...

最新文章

  1. Exchange 2007邮件服务器
  2. XamarinEssentials教程设置首选项Preferences的值
  3. 命令行编译 WRK ,windbg 调试
  4. 帮助文档的数据库结构
  5. CentOS 5.5升级内核到2.6.35.4
  6. 【CV】基于OpenCV的手掌检测和手指计数
  7. leetcode55. 跳跃游戏
  8. 可变参数模板、右值引用带来的移动语义完美转发、lambda表达式的理解
  9. Oracle数据库,当DML操作时执行触发器记录日志
  10. Linux多网口绑定配合华为5700 eth-trunk技术,提高网络性能
  11. java.util.concurrent.ExecutorService 接口 源码
  12. Nginx进程间通讯方式
  13. 【Elasticsearch】Resizing Elasticsearch shards for fun and profit
  14. Linux内核协议栈-一个socket的调用过程,从用户态接口到底层硬件
  15. 计算机二级考试改错题技巧
  16. 【C++】判断指定元素是否在vector中的若干种方法小结
  17. 基于深度学习的单人步态识别系统
  18. 工作一般预留什么邮箱? 注册工作邮箱谨防几大雷区!
  19. ChatGPT会砸了谷歌的饭碗吗?(附彩蛋)
  20. vue即时通讯,一个很好用的插件

热门文章

  1. java调用CMD完成文件复制
  2. Android MVP架构模式
  3. 正常性入职岗前培训(非培训机构的实习生入职培训)---基础知识总结
  4. iperf3 x86和Arm版本安装及用法
  5. HIS系统是什么意思?HIS系统的主要功能有哪些?
  6. java圆形_Java 打印圆形
  7. java查询全国地区
  8. 计算机编码问题总结——哈夫曼编码
  9. Tlsr8258开发-小问题汇总
  10. Pandas Cut 与dataframe随机抽取(sample)替换(replace)应用案例