LinuxShell——变量
LinuxShell——变量
摘要:本文主要学习了Shell命令中的变量。
什么是变量
简单的说,变量就是让某一个特定字串代表不固定的内容。
变量是计算机内存的单元,其中存放的值可以改变。当Shell脚本需要保存一些信息时,如一个文件名或一个数字,就把它存放在一个变量中。
每个变量都有一个名字,所以很容易引用它。变量可以定制用户本身的工作环境。使用变量可以保存有用信息,使系统获知用户相关设置。变量也可以用于保存暂时信息。
变量的命名规范
在定义变量时,有一些规则需要遵守。
1)变量名可以由字母、数字和下画线组成,但是不能以数字开头。
2)变量用等号“=”连接,“=”左右两侧不能有空格。这是Shell语言特有的格式要求。在绝大多数的其他语言中,“=”左右两侧是可以加入空格的。但是在Shell中如果在“=”左右两侧加入空格,那么Linux会误以为这是系统命令,是会报错的。
3)变量值中如果有空格,则需要使用单引号或双引号包括。双引号括起来的特殊字符可以保留原有含义,而单引号括起来的内容都是普通字符。
例如:设置变量 var="lang is $LANG" ,获取变量 echo $var ,得到结果 lang is zh_CN.UTF- 。
4)在变量值中,可以使用转义符“\”将特殊字符变成普通字符。
例如:设置变量 var=Hello\ Word ,获取变量 echo $var ,得到结果 Hello Word 。
5)如果要把命令的执行结果作为变量值赋予变量,则需要使用反引号`命令`或$(命令),建议使用$(命令)。
例如:设置变量 var=$(date) ,获取变量 echo $var ,得到结果 2019年 07月 15日 星期一 :: CST 。
6)在BASH中,变量的默认类型都是字符串型,如果要进行数值运算,则必须指定变量类型为数值型。
例如:设置变量 var=+ ,获取变量 echo $var ,得到结果 + 。
7)如果需要増加变量值,那么可以进行变量叠加,变量叠加可以使用"$变量名"或${变量名},建议使用${变量名}。
例如:设置变量 var= ,修改变量 var=${var} ,获取变量 echo $var ,得到结果 。
8)自定义变量建议小写,环境变量名建议大写,便于区分。
用户自定义变量
说明
用户自定义变量是最常用的变量类型,其特点是变量名和变量值都是由用户自由定义的。
设置和修改变量
变量的设置和修改很简单,使用“=”符号连接左边的变量名和右边的变量值即可:
[root@localhost ~]# 变量名=变量值
显示和使用变量
可以使用echo命令来获取变量,但是在使用变量时,需要在变量名前面加上“$”符号:
[root@localhost ~]# $变量名
也可以使用set命令查看所有的变量,包括用户自定义变量和环境变量:
[root@localhost ~]# set
删除变量
要想删除自定义变量,可以使用unset命令:
[root@localhost ~]# unset 变量名
环境变量
说明
环境变量和用户自定义变量最主要的区别在于,环境变量是全局变量,而用户自定义变量是局部变量。用户自定义变量只在当前的Shell中生效,而环境变量会在当前Shell和这个Shell的所有子Shell中生效。如果把环境变量写入相应的配置文件,那么这个环境变量就会在所有的Shell中生效。
这是有区别的,如果环境变量不写入配置文件,那么当前Shell一旦终止,这个环境变量就会消失,而只有写入配置文件才会永久地在所有Shell中生效。
在Linux中一般通过环境变量配置操作系统的环境,如提示符、查找命令的路径、用户家目录等,这些系统默认的环境变量的变量名是固定的,我们只能修改变量的值。
子程序
如果目前这个shell的情况下,去启用另一个新的shell,新的那个shell就是子程序。
在一般的状态下,父程序的自定义变量是无法在子程序内使用的。但是通过export将变量变成环境变量后,就能够在子程序里使用了。
设置变量
环境变量和用户自定义变量的设置方法相比,只需通过export命令将变量声明为环境变量即可:
[root@localhost ~]# export var=hello
也可以先把变量声明为本地变量,再用export声明为环境变量:
[root@localhost ~]# var=hello
[root@localhost ~]# export var
显示和使用变量
环境变量也可以使用echo命令来获取:
[root@localhost ~]# $变量名
set既可以查询用户自定义变量,也可以查询环境变量。也可以使用env命进行环境变量的查询,env命令不会显示用户自定义变量:
[root@localhost ~]# env
删除变量
环境变量的删除方法和用户自定义变量是一样的,都使用unset命令:
[root@localhost ~]# unset 变量名
其他类型的变量
位置参数变量
在Linux的命令行中,当一条命令或脚本执行时,后面可以跟多个参数,我们使用位置参数变量来表示这些参数。
其中,$0代表命令行本身,$1代表第1个参数,$2代表第2个参数,依次类推。当参数个数超过10个时,就要用大括号把这个数字括起来,例如,${10}代表第10个参数。
在Shell中可以识别的位置参数变量:
$n:n为数字,$0代表命令本身,$1到$9代表第1个到第9个参数,10以上的参数需要用大括号包含,如${}。
$*:这个变量代表命令行中所有的参数,把所有的参数看成一个整体。
$@:这个变量也代表命令行中所有的参数,不过$@把每个参数区别对待。
$#:这个变量代表命令行中所有参数的个数。
预定义变量
预定义变量是在Shell一开始时就定义的变量,这一点和默认环境变量有些类似。不同的是,预定义变量不能重新定义,用户只能根据Shell的定义来使用这些变量。
严格来说,位置参数变量也是预定义变量的一种,知识位置参数变量的作用比较统一,所以我们把位置参数变量单独划分为一类数量。
Shell中主要的预定义变量:
$?:最后一次执行的命令的返回状态。如果这个变量的值为0,则证明上一条命令正确执行。如果这个变量的值不为0,则证明上一条命令执行错误。
$$:当前进程的进程号(PID)。
$!:后台运行的最后一个进程的进程号(PID)。
声明变量类型
所有变量的默认类型是字符串型,使用declare命令可以声明变量的类型。
基本语法
[root@localhost ~]# declare [+/-] [选项] 变量名
选项说明
-:给变量设定类型属性。
+:取消变量的类型属性。
-a:将变量声明为数组型。
-i:将变量声明为整数型。
-r:将变量声明为只读变量。注意,一旦设置为只读变量,既不能修改变量的值,也不能删除变量,甚至不能通过+r取消只读属性。
-x:将变量声明为环境变量。
-p:显示指定变量的被声明的类型。
LinuxShell——变量的更多相关文章
- 6 小时 Python 入门
6 小时 Python 入门 以下操作均在 Windows 环境下进行操作,先说明一下哈 一.安装 Python 1.官网下载 Python 进入官网(https://www.python.org), ...
- LinuxShell脚本——变量和数据类型
LinuxShell脚本——变量和数据类型 摘要:本文主要学习了Shell脚本中的变量和数据类型. 变量 定义变量的语法 定义变量时,变量名和变量值之间使用“=”分隔,并且等号两边不能有空格: 变量名 ...
- Batch pk Shell - WindowsBatch与LinuxShell比较 [变量符号和关键字]
原文地址:WindowsBatch与LinuxShell比较[变量符号和关键字] 一 简单实例1)batch file @echo off rem output helloworld :: outp ...
- Linuxshell脚本-格式-变量-条件测试
1.Linuxshell脚本格式 脚本文件名称格式: 1.NAME.sh.脚本文件名称必须以 .sh 结尾 脚本编辑第一行必须包括shell声明序列:#! 添加注释,注释以#开头 2.加3执行 ...
- Linux-Shell基础(变量,字符串,数组)
一. 什么是shell shell是一个用C语言编写的程序,它是用户使用Linux的桥梁,又是一种程序设计语言. Shell 是指一种应用程序,这个应用程序提供了一个界面,用户通过这个界面访问操作系统 ...
- linuxshell编程之变量
变量分类: 用户自定义变量:局部变量 定义格式:变量名=变量值(*等号左右不能有空格,加了空格会报错) 调用格式:echo $变量名(调用的是变量名等效的值) 变量叠加:$x=123,y=" ...
- linuxshell编程之环境变量配置文件 Tony Linux系统工程师
视频参考慕课网 如果修改了环境变量的配置文件,要使得修改的环境变量生效可以使用下面的两个命令 下面是点后面加上了一个空格然后再加上配置文件,这里一定要注意下 这里要注意和隐藏文件的区别: 在linux ...
- Linux基础之-shell script(变量,运算符,流程控制,函数)
一.shell script Shell 脚本(shell script),是一种为shell编写的脚本程序.业界所说的shell通常都是指shell脚本,但读者朋友要知道,shell和shell s ...
- shell脚本读取文件+读取命令行参数+读取标准输入+变量赋值+输出到文件
读取url_list文件批量下载网页 url_list http://www.tianyancha.com/company/2412078287 http://www.4399.com/special ...
随机推荐
- springboot-配置多个数据源
1.创建一个datasource包,新建DataSource1,DataSource2两个文件,通过注解来配置数据源 DataSource1: package com.springboot.datas ...
- Hive性能调优(二)----数据倾斜
Hive在分布式运行的时候最害怕的是数据倾斜,这是由于分布式系统的特性决定的,因为分布式系统之所以很快是由于作业平均分配给了不同的节点,不同节点同心协力,从而达到更快处理完作业的目的. Hive中数据 ...
- PyCharm注释中出现中文运行报错的解决办法
SyntaxError: Non-UTF-8 code starting with '..... 方法一:在文件首行加上 # -*- coding:utf-8 -*- 方法二:更改编码格式 File ...
- Python正则、re模块
正则的概念 findall match search 方法 元字符的用法和作用 正则表达式概念 正则表达式是对字符串操作的一种逻辑公式,就是对字符串的一种过滤 可以判断是 ...
- Git 常用命令:
Git 常用命令: 1.git status #查看本地工作文件夹有哪些改动(和本地仓库对比),把差别列出. 2.git log #查看commit 的日志.(git log -2 只看最近2次的co ...
- Java实现记事本|IO流/GUI
Java实现记事本 题目 利用GUI实现一个简单的记事本(notepad),即打开文件,文字内容显示在界面上: 允许对文字内容进行编辑,并可以保存到文件. 代码 package notePadExp; ...
- drf扩展知识点总结视图
- 快速获取 IP 地址
IP 地址可以分为两类,公用和私有(专用).公用 IP 是唯一的 IP 地址,可以从 Internet 访问.专用 IP 地址保留供您专用网络内部使用,而不会直接暴露给 Internet. 本文将介绍 ...
- 编程计算2×3阶矩阵A和3×2阶矩阵B之积C。 矩阵相乘的基本方法是: 矩阵A的第i行的所有元素同矩阵B第j列的元素对应相乘, 并把相乘的结果相加,最终得到的值就是矩阵C的第i行第j列的值。 要求: (1)从键盘分别输入矩阵A和B, 输出乘积矩阵C (2) **输入提示信息为: 输入矩阵A之前提示:"Input 2*3 matrix a:\n" 输入矩阵B之前提示
编程计算2×3阶矩阵A和3×2阶矩阵B之积C. 矩阵相乘的基本方法是: 矩阵A的第i行的所有元素同矩阵B第j列的元素对应相乘, 并把相乘的结果相加,最终得到的值就是矩阵C的第i行第j列的值. 要求: ...
- 重构与模式 (Joshua Kerievsky 著)
第1章 本书的写作缘由 第2章 重构 第3章 模式 第4章 代码坏味 第5章 模式导向的重构目录 第6章 创建 第7章 简化 第8章 泛化 第9章 保护 第10章 聚集操作 第11章 实用重构 参考文 ...