2.shell语法:shell变量定义和使用_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 命令,如图所示。è¿å¥Shellå­è¿ç¨通过exit命令可以一层一层地退出 Shell。

3) shell变量

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

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

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

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/u013755520/article/details/90669044

智能推荐

利用Python抢票,攻破12306的最后一道防线_python抢票软件 非法请求_An frazer的博客-程序员秘密

为了方面和节约时间,本次使用的python编译器和解释器分别为pycharm,python3.6.1RC

【单镜头反光相机】CCD、CMOS_weixin_30383279的博客-程序员秘密

CCD、CMOS:图像传感器、电荷耦合器CCD简介CMOS简介:①被动式 ,被动式像素结构(Passive Pixel Sensor.简称PPS),又叫无源式。 ②主动式,主动式像素结构(Active Pixel Sensor.简称APS),又叫有源式。区别链接:①主要差异是数字数据传送的方式不同。作为一种...

win10 更新后出现的 DeliveryOptimization 文件夹如何删除_deliveryoptimization删不掉_dujiahei的博客-程序员秘密

更新win10 到1809版本以后,发现D盘多了一个文件夹,强制删除一直被报“使用中”在网上百度,有人说重启以后立马删除,发现结果不变。然后按照https://www.pcwanjia.com/html/2018/12/118.html 这里的解释,这是“传递优化”的一个文件夹。什么是Windows 更新传递优化? 更新传递优化是微软在Windows10系统中内置的一个辅助升...

vue如何引入swiper和如何使用 以及相关的问题解决_修炼中的小精灵的博客-程序员秘密

1、github中搜索swiper 参考网址https://github.com/surmon-china/vue-awesome-swiper2、按照步骤进行操作 安装npm install vue-awesome-swiper --save3、在main.js中引入import VueAwesomeSwiper from 'vue-awesome-swiper'// ...

【python】python新手必碰到的问题---encode与decode,中文乱码[转]_善始善终的博客-程序员秘密

为什么会报错“UnicodeEncodeError:'ascii' codec can't encode characters in position 0-1: ordinal notin range(128)”?本文就来研究一下这个问题。字符串在Python内部的表示是unicode编码,因此,在做编码转换时,通常需要以unicode作为中间编码,即先将其他编码的字符串解码(decode)成

autojs监听toast信息_toast监听_『LXL』的博客-程序员秘密

auto();events.observeToast();events.onToast(function(toast){ log(toast.texts) log("Toast内容:" + toast.getText() +"包名:" + toast.getPackageName())});

随便推点

mysql 存储及查询亿级数据_年华似水的博客-程序员秘密

第一阶段:1,一定要正确设计索引2,一定要避免SQL语句全表扫描,所以SQL一定要走索引(如:一切的 > < != 等等之类的写法都会导致全表扫描)3,一定要避免 limit 10000000,20 这样的查询4,一定要避免 LEFT JOIN 之类的查询,不把这样的逻辑处理交给数据库5,每个表索引不要建太多,大数据时会增加数据库的写入压力第二阶段:1,采用分表技术(大表分小表)

http-关于application/x-www-form-urlencoded等字符编码的解释说明_qt中application/x-www-form-urlencoded_高祥xiang的博客-程序员秘密

转至:http://blog.csdn.net/klarclm/article/details/7711021 感谢分享在Form元素的语法中,EncType表明提交数据的格式 用 Enctype 属性指定将数据回发到服务器时浏览器使用的编码类型。 下边是说明: application/x-www-form-urlencoded: 窗体数据被编码为名称/值对。这是标准的编码格式。 mu

程序员水平10分级,你的水平属于哪一级?_编程大哥大的博客-程序员秘密

随着技术发展,编程悄然融入了我们的生活。我们已然离不开那些程序和编程语言。很多人都在不同程度地谈论着如何编程,也诞生出很多编程语言排行,那么程序员到底应该如何分级呢?首先要明白什么是程序员。设计自己的Apache Web服务器的家伙?制作一个复杂Excel的家伙?还是能自己开发RPG的家伙?Minecraft的玩家?这些都属于程序员的哪一个级别呢?当我们说:“每个人都需要了解编程”,这句话意味

45万例患者基因检测显示:NGS很难检测出七分之一的致病变异_生信宝典的博客-程序员秘密

基于下一代测序(NGS)的临床基因测试越来越多地用于辅助诊断,针对该技术的临床应用有具体的指南,除了检测相对可靠的单核苷酸变异(SNVs)和微小插入缺失(indel),NGS也已经被扩展到...

ORA-39082:Object type ALTER_PACKAGE_SPEC:""create with compilation warnings_ora39082警告影响数据吗_jingleli21的博客-程序员秘密

分析其原因:因为存储过程TEST里面有中文,编译时出错解决方法:修改源数据库存储过程,避免出现中文字符

openstack(Pike 版)集群部署(三)--- Glance 部署_weixin_30902675的博客-程序员秘密

一、介绍  参照官网部署:https://docs.openstack.org/glance/queens/install/  继续上一博客进行部署:http://www.cnblogs.com/weijie0717/p/8556939.html二、部署 Glance  1、配置数据库 (任意controller 节点操作)    #mysql -uroot -p  ...

推荐文章

热门文章

相关标签