一、什么是变量?

  1. 变量就是一个固定的字符串(也可以是字符、数字的组合)代替更多、更复杂的内容,该内容可能是变量、路径、字符串等其他内容。
  2. 变量就是程序中保存用户数据的一块内存空间,而变量名就是这块内存空间的地址。
  3. 变量的值是在计算机的内存中,所以计算机重启后变量值就会丢失。需要长久保存的数据,应写入磁盘,避免存储在变量中。

变量名:变量名可以由字母、数字、或者下划线组成,变量名区分大小写,大小写不同的两个变量名代表不同变量。

二、变量的作用域?

变量可以分为两类:环境变量(全局变量)和自定义变量(局部变量),环境变量可以称为全局变量,自定义变量可以称为局部变量。

1、全局变量(等价于环境变量)

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

实例一:在脚本中定义的变量为全局变量,不仅在脚本中可以使用,还可以在函数内部使用。

#!/bin/bash
定义函数
func()
{
echo "$v1" #输出全局变量v1的值
v1= #修改全局变量的值
}
v1= #全局变量
func
echo "$v1"
[root@host- ~]# sh Var01.sh

实例二:在shell中,默认情况下,函数内部定义的变量也属于全局变量。

#!/bin/bash
#定义一个变量
func()
{
var1=
}
func
echo "$var1"
[root@host- ~]# sh Var02.sh

2、局部变量(等价于自定义变量)

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

实例一:由于函数内部使用了local 关键字,显式的定义了局部变量,所以再函数外部不能获得该变量

#!/bin/bash
#定义一个函数
func()
{
local v1=
}
func
echo "$v1"
~ [root@host- ~]# sh Var3.sh #执行结果为空

实例二、如果函数外部定义的全局变量和函数内部的局部变量同名,函数内部的局部变量会优先被使用。下例中尽管修改函数内部变量值v1,但只影响了局部变量v1,函数外部输出依然是全局变量v1。

#!/bin/bash
#定义一个函数
v1=
func()
{
echo "$v1"
local v1=
echo "$v1"
}
func
echo "$v1"

[root@host-131 ~]# sh Var3.sh

300
100
300

三、变量的类型?

变量可分为两类:环境变量(全局变量)和自定义变量(局部变量)。

两者的区别:环境变量可以在其进程的子进程中继续有效,自定义变量的实力范围则无法延伸到其进程的子进程中。

1、显示变量的命令:

  • env :显示当前用户的环境变量,但不会显示其自定义变量
  • export : 功能同env一样,也是显示当前用户的环境变量,只不过该命令的输出是按变量名进行排序。
  • declare : 显示当前shell中定义的所有变量,包括用户的环境变量和自定义变量,该命令的输出按照变量名进行排序
  • set :功能同declare一样,显示当前shell中定义的所有变量,包括用户的环境变量和自定义变量。

结论:

env export 显示的是环境变量

set declare 显示的是环境变量和自定义变量。

四、简述变量的类型?

 1、 自定义变量

定义变量: 变量名=变量值 变量名必须以字母或下划线开头,区分大小写 ip1=192.168.2.115
引用变量: $变量名 或 ${变量名}
查看变量: echo $变量名 set(所有变量:包括自定义变量和环境变量)
取消变量: unset 变量名
作用范围: 仅在当前shell中有效

2、环境变量

定义环境变量: 方法一 export back_dir2=/home/backup
        方法二 export back_dir1 将自定义变量转换成环境变量
引用环境变量: $变量名 或 ${变量名}
查看环境变量: echo $变量名 env 例如env |grep back_dir2
取消环境变量: unset 变量名
变量作用范围: 在当前shell和子shell有效
=======================================================
C语言        局部变量 vs 全局变量
SHELL  自定义变量 vs 环境变量
=======================================================

3、位置变量
$1 $2 $3 $4 $5 $6 $7 $8 $9 ${10}

4、预定义变量
$0 脚本名
$* 所有的参数
$@ 所有的参数
$# 参数的个数
$$ 当前进程的PID
$! 上一个后台进程的PID
$? 上一个命令的返回值 0表示成功

五、变量的赋值、清除、引用、替换

1、变量的赋值

1.1 显式赋值
  变量名=变量值
  示例:

v1=Linux
v2='RedHat Linux'
v3="Redhat $v1"
v4=

1.2 read 从键盘读入变量值

    read 变量名
read -p "提示信息: " 变量名 #-p 选项用来显示提示语
read -t -p "提示信息: " 变量名 #-t 可以设置一个倾听的时间
read -n 变量名
read -s -p "提示信息: " 变量名 #-s 选项,它可以实现用户输入的时候,屏幕上不显示任何信息

例1:显示提示语,和隐藏输入

#!/bin/bash
read -p "please input your name:" name
echo "welcome !!!! $name" read -s -p "please input your Age:" age
echo "your age is $age"
exit

:1、如果输入的变量数量少于变量的个数,那么多余的变量不会获取到数据,即变量为空

  2、如果输入的变量输多余变量的个数,那么超出的数据将都赋给最后一个变量

例2:测试输入的ip是否通

[root@host- ~]# cat var06.sh
#!/bin/bash
read -p "Input ip:" ip
ping -c $ip &>/dev/null
if [ $? -eq ] ;then
echo "This $ip is ok"
else
echo "This $ip is fail"
fi
[root@host- ~]# chmod a+x var06.sh
[root@host- ~]# ./var06.sh
Input ip:192.168.1.131
This 192.168.1.131 is ok
[root@host- ~]#

2、清除变量

当某个变量不用的时候我们可以清除,当变量清除后,其代表的值也会消失。

实例一:清除变量

[root@host- ~]# cat Var04.sh
#!/bin/bash
v1="Hello World"
echo "$v1"
unset v1
echo "变量已清除"
echo "$v1" [root@host- ~]# ./Var04.sh
Hello World
变量已清除

3、变量的引用

shell中,一共有4种引用符号:

4、命令替换

在bash中命令替换有两种语法

1、反引号 `shell_command`

2、圆括号 $(shell_command)

[root@host- ~]# v1="`pwd`"
[root@host- ~]# echo $v1
/root
[root@host- ~]# v2=$(pwd)
[root@host- ~]# echo $v2
/root

5、转义

转换某些字符的特殊意义:

[root@host- ~]# echo $SHELL
/bin/bash
[root@host- ~]# echo \$SHELL
$SHELL
[root@host- ~]#

【第二章】Shell 变量的更多相关文章

  1. perl5 第二章 简单变量

    第二章 简单变量  by flamephoenix 一.整型 二.浮点数 三.字符串 基本上,简单变量就是一个数据单元,这个单元可以是数字或字符串.一.整型 1.整型   PERL最常用的简单变量,由 ...

  2. 【C语言探索之旅】 第一部分第四课第二章:变量的世界之变量声明

    内容简介 1.课程大纲 2.第一部分第四课第二章:变量的世界之变量声明 3.第一部分第四课第三章预告:变量的世界之显示变量内容 课程大纲 我们的课程分为四大部分,每一个部分结束后都会有练习题,并会公布 ...

  3. C++primer拾遗(第二章:变量和基本类型)

    这是我对c++primer第二章的一个整理总结,算是比较适用于我自己吧,一小部分感觉不用提及的就省略了,只提了一下平时不注意,或者不好记住的内容. 排版太费劲了,直接放了图片格式.从自己的oneNot ...

  4. C++ Primer : 第二章:变量和基本类型(1)

    变量和基本类型之第一篇:基本内置类型和变量 一. (1) C++定义了一套包括算数类型和空类型,这些类型有:布尔类型bool,字符类型char,宽字符类型wchar_t,Unicode字符char16 ...

  5. 第二章 shell的语法

    变量:字符串.数字.环境和参数 获取变量内容可以在变量前使用$字符,使用echo指令可以将变量内容输出到终端. wuchao@wuchao-Lenovo:~$ var=hello wuchao@wuc ...

  6. 《Python编程从入门到实践》第二章_变量和简单数据类型

    什么是变量呢? 举例: >>> message = "Hello,Python!" >>> print (message) Hello,Pyth ...

  7. 第二章 python变量及文件

    1.环境变量 1.配置环境变量不是必须的2.配置环境变量的目的:为终端提供执行环境 2.Python代码执行 1.交互式       -- 控制台直接编写运行Python代码       -- 1.打 ...

  8. 《Python编程从入门到实践》_第二章_变量和简单数据类型

    什么是变量 举例: >>> message = "Hello,Python!" >>> print (message) Hello,Python ...

  9. [转]Windows Shell 编程 第二章 【来源:http://blog.csdn.net/wangqiulin123456/article/details/7987893】

    第二章Shell的结构  “Shell 编程”的大伞之下有大量的API函数和COM接口.这个种类繁多的‘命令’集允许你用不同的方法对Windows Shell进行编程.函数和接口并不是两种提供相同功能 ...

  10. 【js 笔记】读阮一峰老师 es6 入门笔记 —— 第二章

    第二章:变量的解构赋值 在es6 版本前,如果要为多个变量赋不同值,我想是件比较麻烦的事情.但es6 版本新推出了一个新技术那就是今天的主角变量的解构赋值. 变量解构赋值分为两种方法:数组解构赋值 和 ...

随机推荐

  1. 解决ssh连接linux系统特别慢的问题

    新安装的centos系统,发现ssh连接很慢,因为是测试环境,对安全的要求不高,所以完全可以更快的连接,下面一起来解决这个问题. 一.分析主要原因: 1.SSH的反向DNS解析会消耗大量时间 2.GS ...

  2. 复习宝典之SpringMVC

    查看更多宝典,请点击<金三银四,你的专属面试宝典> 第七章:SpringMVC MVC全名是Model View Controller,是模型(model)-视图(view)-控制器(co ...

  3. vue的声明式渲染

    声明式渲染 答:2018-8-23声明式渲染是vue对数据进行操作的模式,也叫做响应式渲染当dom节点上绑定了vue的对象的属性时,如果这个属性发生了改变,无需你进行其它的操作,页面上的数据会自动发生 ...

  4. H5测试(转载)

    可能有些朋友不明白啥是H5,但其实生活中我们经常会碰到. 比如,你经常收到的朋友虐狗第一式—结婚请贴. 你的朋友圈,可能会经常看到宝妈们虐狗第二式—晒可爱宝宝的相册. 你有可能也收到过这样,非常直观, ...

  5. PADS随记

    在PADS,PCB板设计中,怎么一次就把丝印的大小设置好? CTRL+ALT+F  组合键 打开 选择过滤器(Filter) 如下图 去掉其他的勾选,只选择 Labels . 之后在板子上鼠标拖动选上 ...

  6. PHP变量问题,Bugku变量1

    知识点:php正则表达式,php函数,全局变量GLOBALS(注意global和$GLOBALS[]的区别) PHP函数: isset():     条件判断 get方法传递的args参数是否存在 p ...

  7. Qt——styleSheet

    1.两个地方调用 QWidget::setStyleSheet() QApplication::setStyleSheet() 2.基本语法 selector {attribute : value} ...

  8. flash读写学习笔记与spi接口及简单测试验证(三)

    FPGA中的视频图像资源,以及想要永久存储的程序都是要存储在flash中,flash是FPGA一个不可缺少的部分,flash的种类有很多,根据winbond公司的128Mbit Qual SPI接口的 ...

  9. centos下安装python的过程

    Linux下默认系统自带python2.6的版本,这个版本被系统很多程序所依赖,所以不建议删除,如果使用最新的Python3那么我们知道编译安装源码包和系统默认包之间是没有任何影响的,所以可以安装py ...

  10. sql,lambda,linq语句

    实例 Code 查询Student表的所有记录. select * from student Linq: from s in Students select s Lambda: Students.Se ...