shell基础篇(二)-shell变量
1. 定义变量
1).定义变量时,变量名不加美元符号($),如:
var="hello world"
2).注意,变量名和等号之间不能有空格,这可能和你熟悉的所有编程语言都不一样。同时,变量名的命名须遵循如下规则:
首个字符必须为字母(a-z,A-Z)。
中间不能有空格,可以使用下划线(_)。
不能使用标点符号。
不能使用bash里的关键字。
var01=100
var02="100"
注意,这两个变量存的都是字符串。我们的shell是解释型语言,不像C,JAVA需要编译。
2.使用变量
使用一个定义过的变量,只要在变量名前面加美元符号($)即可,如:
echo $var
echo ${var} ##推荐这种。
变量名外面的花括号是可选的,加不加都行,加花括号是为了帮助解释器识别变量的边界,比如下面这种情况:
filename="lottu"
echo "this is ${filename}01"
如果不给filename变量加花括号,写成echo "this is $filename01",
解释器就会把filename01当成一个变量(其值为空),这个filename01我们可没定义。
代码执行结果就不是我们期望的样子了
3.重新定义变量
已定义的变量,可以被重新定义,如:
abc="lottu"
echo ${abc}
abc="hello world"
echo ${abc}
4. 只读变量
使用 readonly 命令可以将变量定义为只读变量,只读变量的值不能被改变。即其他语言的常量。如lottu03.sh
#!/bin/bash
var01="20"
echo ${var01}
readonly var01
var01="10"
运行结果如下:
$ ./lottu03.sh
20
./lottu03.sh: line 5: var01: readonly variable
5. 删除变量
使用 unset 命令可以删除变量。语法:
unset varname
变量被删除后不能再次使用;unset 命令不能删除只读变量。
6. 显示所有变量
看看这个用户下有哪些变量包括环境变量,本地变量:set ##我们之前定义的var,abc就是在这里面。
只显示环境变量: env
本地变量转换为环境变量;使用命令export
删除环境变量;跟本地变量没区别;使用命令unset.
7.变量的间接引用
variable:+word :如果变量 variable 被定义,那么返回 word,但不改变 variable 的值。
variable:=value :对未赋值的variable,将value值赋给它
variable:-value :对未赋值的variable,将value值赋给它,但不改变 variable 的值。
:=和:-是两种常用的符号,看下面的例子
例1:先将colour赋值为black,然后输出${colour:=blue}和${colour:-blue},两者输出结果相同,都为black,这是因为colour变量已经赋过值“:=”和”:-”都不重设其值。注意,使用以上两种符号时,都需要用花括号将赋值式子括起来,否则Shell将colour:=blue整个字符串当做变量名进行处理。
$colour=black
$echo "The background is ${colour:=blue}"
The background is black
$echo "The background is ${colour:-blue}"
The background is black
例2:清除colour变量值,再分别输出${colour:=blue}、$colour和${colour:-blue}、$colour的值,结果显示:${colour:=blue}和${colour:-blue}值都为blue,因为colour未赋值两个符号都将blue赋给colour。但是,调用${colour:-blue}后,colour仍然为空,即”:-”符号未将blue真正存储到colour中,而“:=”符号将blue真正存储起来。
$unset colour
$echo "The background is ${colour:-blue}"
The background is blue
$echo $colour
$echo "The background is ${colour:=blue}"
The background is blue
$echo $colour #注意这步跟上面的比较
blue
8.特殊变量:Shell $0, $#, $*, $@, $?, $$和命令行参数
在此先声明:这里的$0,$1-$9就别跟awk里面的弄混淆了;它们的意义是完全不同的哦。
变量 含义
$0 当前脚本的文件名
$n 传递给脚本或函数的参数。n 是一个数字,表示第几个参数。例如,第一个参数是$1,第二个参数是$2。
$# 传递给脚本或函数的参数个数。
$* 传递给脚本或函数的所有参数。
$@ 传递给脚本或函数的所有参数。被双引号(" ")包含时,与 $* 稍有不同。
$? 上个命令的退出状态,或函数的返回值。
$$ 当前Shell进程ID。对于 Shell 脚本,就是这些脚本所在的进程ID。
【注意】对$n;若n大于9;则需要加衣服{}。不然会冻僵了,就没人会认识了。例如${10}。这我就认识原来是老十。反之;你是老1+0,还是老十。这个我就要好好想想了。
对于$?:可以获取上一个命令的退出状态。所谓退出状态,就是上一个命令执行后的返回结果。记住是上一个命令执行结果或者条件判断结果。意思是说你的条件判断有一堆命令;也只取最后一个;例如ll;cd md。是取cd md的返回结果。
退出状态是一个数字,一般情况下,大部分命令执行成功会返回 0,失败返回 1
意思是boolean说 0是成功的状态;非0是失败的状态。这跟awk里面的正好相反。
shell基础篇(二)-shell变量的更多相关文章
- Shell基础学习(二) Shell变量
1.数据类型: 字符串 数组 2.变量的命名规范: 只能以a-z或A-Z开头 中间不能有空格,可以使用_ 不能使用标点符号 不能使用shell的关键字 3.变量类型: 环境变量 局部变量 shell变 ...
- shell 基础(二)变量
1. shell变量的定义 1)Shell 支持以下三种定义变量的方式: variable=value variable='value' variable="value" 特点 1 ...
- 运维 04 Shell基础命令(二)
Shell基础命令(二) 查看Linux的发行版 cat /etc/redhat-release cat /etc/os-release 查看系统用户的id信息 id 用户名 id root id ...
- php基础篇-二维数组排序 array_multisort
原文:php基础篇-二维数组排序 array_multisort 对2维数组或者多维数组排序是常见的问题,在php中我们有个专门的多维数组排序函数,下面简单介绍下: array_multisort(a ...
- shell重温---基础篇(shell变量&字符串以及git GUI运行shell脚本方式)
既然是基础篇那肯定是需要对shell的各种需要注意的基本点进行说明了.接下来就是show time... shell呢,是一个用C语言编写的应用程序,是用户使用linux的桥梁.所以呢,他既是一 ...
- Linux Shell基础篇——变量
一.Shell中的变量 注:这里所说的Shell是Bash Shell,我姑且统称为Shell. Shell中的变量分为用户自定义变量.环境变量.位置参数变量.预定义变量.在Shell中,变量的默认类 ...
- shell基础之二 bash特性详解
https://blog.51cto.com/13520779/2093146 合格linux运维人员必会的30道shell编程面试题及讲解:https://blog.51cto.com/oldboy ...
- Shell基础(一):Shell基础应用、简单Shell脚本的设计、使用Shell变量、变量的扩展应用
一.Shell基础应用 目标: 本案例要求熟悉Linux Shell环境的特点,主要练习以下操作: 1> 切换用户的Shell环境 2> 练习命令历史.命令别名 3 ...
- shell基础篇(十)shell脚本的包含
前记 写到这里:shell中基础差不多已经讲完了.希望你已经对shell有了一个基本了解.你可能跃跃欲试,要写一些程序练习一下.这会对你很有好处.建议大家去chinaunix去学习:我是li0924. ...
随机推荐
- JS 计算1到1000000个自然数中有几个1的自然数?
<script> window.onload=function(){ var arr=[]; for(var i=1;i<1000001;i++) { var stri= i.t ...
- [已修正]安装struts找不到tld文件
今天安装的struts1.3,但是缺少tld文件,所以无法使用taglib,找了半天 假设你的struts版本为1.3.10 解压后的目录为F:\struts-1.3.10-all\struts-1. ...
- spring报错:Caused by: java.lang.IllegalStateException: Cannot convert value of type for property : no matching editors or conversion strategy found
原因分析:是因为类返回的类型跟期望的类型没有继承关系,返回的类型就SqlMapClient,它是通过实现了FactoryBean<SqlMapClient>接口的SqlMapClientF ...
- C++笔记 4
1.类和对象 类就是对对象的描述,主要从属性和行为两个方面描述. 对于属性一般作成private , 行为作为public 函数 (1)构造函数,初始化所有的成员变量,系统自动调用,可以重 ...
- c#写一个网站后台扫描器
主要分成了那么几个步骤: 1.HTTP状态码 2.字典的导入 3.显示在listview控件当中 第一步: 先来实现HTTP状态码200的判断 try { req = (HttpWebRequest) ...
- xml与dataset的数据交互
1. this.dsConfig = new DataSet(); //使用指定的文件将 XML 架构和数据读入 System.Data.DataSet. this.dsConfig.ReadXml( ...
- 使用Spring MVC统一异常处理实战<转>
1 描述 在J2EE项目的开发中,不管是对底层的数据库操作过程,还是业务层的处理过程,还是控制层的处理过程,都不可避免会遇到各种可预知的.不可预知的异常需要处理.每个过程都单独处理异常,系统的代码耦合 ...
- 常用的百度API地图操作
常用的百度API地图操作,包括模糊搜索,放大缩小,并支持移动端 效果图如下 完整代码: http://download.csdn.net/detail/jine515073/8778167
- rufus/scheduler
之前先在initializers 文件夹下建立了一个task.rb ,rails服务启动的时候执行,本地没问题,可是服务器上启动了3个进程,会执行3遍,解决方法是 把task.rb 放到 script ...
- 深度可分离卷积结构(depthwise separable convolution)计算复杂度分析
https://zhuanlan.zhihu.com/p/28186857 这个例子说明了什么叫做空间可分离卷积,这种方法并不应用在深度学习中,只是用来帮你理解这种结构. 在神经网络中,我们通常会使用 ...