shell script 学习笔记-----shell变量
1、在赋值语句name=value中不能存在空格,例如:name = value这样的形式会被认为是三个变量,因为本质上来说,脚本的内容就是传给shell程序的变量,而变量之间是通过空格区分的。如果想要在value里面出现空格,则需要用引号标注出来,想要应用变量的内容则在变量名前加‘$’符号,如下:

2、当我们需要在一些非空格字符之间插入变量时,例如:为了脚本的扩展性,常在路径名/home/my$USERtxt中用变量取代一部分内容,但是这样做的话,我们其实无法区分变量名是USER还是USERtxt,解决方法其实很简单,把变量名用花括号括起来即可,如/home/my${USER}txt
3、定义变量时,在变量名前加export就可以将该变量变为全局变量,并且可以在子shell中调用它,不过需要注意的是,该全局变量是通过“值传递”的方式进入子shell的,类似与C语言中的函数参数,虽然在子函数中改变了它的值,但是它原本的值并没有改变。那么有没有类似指针的东西能直接改变原变量的值呢?回答是,没有。(通过env或者export -p命令可以查看全部的全局变量)

4、同时我们能像C语言一样直接给shell脚本传递命令行参数,在脚本中$1就表示第一个参数,$2表示第二个参数,以此类推,需要注意的是,当表示第十个以上的参数时,需要用花括号将序号括起来,例如:${10},因为$10会被分解为$1和0。这里需要注意的是,如果命令行参数表示的字符串里有空格,那么在输入命令行是要将该参数用引号括起来,同时在脚本里引用时,也要使用引号,例如:ls "${1}",否则在脚本内部,该参数也会被误认为由空格分割的多个参数

5、在脚本中,符号$*表示所有的命令行参数,我们可以用如下方式对其进行遍历,不过通常我们更推荐使用"$@",因为它能在命令行参数内部有空格的时候将其区分开来

6、变量$#用于统计命令行参数的个数:

7、变量的默认值:1)B=${A:-"xxx"}表示如果变量A未设置或值为空,则B=“xxx”,2)与:-符号不同的是${A:="xxx"}表示如果A未设置或为空,则将A设置为''xxx'并且返回值"xxx",你可以认为:-只做返回值,而不做赋值。3)${A="xxx"}表示当且仅当变量A未被设置,它的值置为"xxx",这么做的意思就是允许变量名的默认值为空

8、数组变量的定义与使用如下所示:bash支持一维数组(不支持多维数组),没有限定数组大小,并且可以不使用连续的数组下标
使用@符号可以获取数组中的所有元素,例如 echo ${array[@]}

9、最后,其实在变量赋值的时候,如果使用了双引号,那么双引号内的可以不仅仅是字符串,实际上shell会将引号内的内容进行解析。例如引号内的$HOME将被替换成变量HOME的值,$(pwd)将被替换成命令pwd的输出,$((1+1))则将被替换成1+1运算的结果

10、字符串可以用单引号,双引号,也可以不用引号。其中单引号里的任何字符都会原样输出,单引号字符串中的变量是无效的,单引号字符串里不能出现单引号,对单引号使用转义符也不行。相反,双引号中可以有变量,也可以有转义字符。
11、shell中反引号起着命令替换的作用。命令替换是指shell能够将一个命令的标准输出插入到一个命令行中的任何位置。示例如下:

参考文献:《bash Cookbook》,Carl Albing
shell script 学习笔记-----shell变量的更多相关文章
- shell script 学习笔记-----命令执行
1.PATH变量:shell最主要的功能就是执行用户输入的命令,例如当用户输入一条“ls”命令之后,shell就要找到该命令对应的文件并执行.通常shell都会设置一个名叫PATH的环境变量,其中保存 ...
- shell script 学习笔记-----if,for,while,case语句
1.if内的判断条件为逻辑运算: 2.if内的判断条件为目录是否存在,文件是否存在,下图先检验目录/home/monster是否存在,然后再检测/home/monster中的file.txt文件是否存 ...
- shell script 学习笔记-----标准输出
1.将标准输出(stdout)和标准错误输出(stderr)分别重定向到两个不同的文件 其中符号'>'默认将标准输出重定向,意思和'1>'相同,‘2>'表示重定向标准错误输出,数字1 ...
- Linux shell 菜鸟学习笔记....
20171123 Linux shell 基础学习笔记1. shell 的开始 一般是 #!/bin/bash 通过 #! 来唯一指定使用的shell路径 其他的 # 都表示注释.2. shell 的 ...
- shell script 入门 笔记
shell script 入门 在 shell script 注意必须使用完全相同写在下面: 1. 指令的运行是从上而下.从左而右的分析与运行: 2. 指令的运行就如同第五章内提到的: 指令.选项 ...
- ES6学习笔记之变量的解构赋值
变量的解构赋值 ES6允许按照一定模式,从数组和对象中提取值,对变量进行赋值,这被称为解构. 数组的解构赋值 以前,为变量赋值,只能直接指定值: 1 2 3 var a = 1; var b = 2; ...
- bash shell学习-shell script基础 (笔记)
A chain no stronger than its weakest link. "一着不慎,满盘皆输" 参考资料:鸟哥的Linux私房菜 基础学习篇(第三版) Linux ...
- Shell学习笔记 - Shell变量
一.变量的命名 变量名必须以字母或下划线开头,由字母.数字.或下划线组成,变量名的长度不能超过255个字符. 二.变量的分类 1. 用户自定义变量 2. 环境变量 3. 位置参数变量 4. 预定义变量 ...
- shell学习笔记3---shell变量
Shell变量的定义.赋值和删除 脚本语言在定义变量时通常不需要指明类型,直接赋值就可以,Shell 变量也遵循这个规则. 在 Bash shell 中,每一个变量的值都是字符串,无论你给变量赋值时有 ...
随机推荐
- 随心所欲导出你的 UI 界面到 PDF 文件
使用 C1PDF 控件可以导出文件到 PDF 文件,结合 .NET 平台特性你可以在任何客户端生成自定义报表.你可以打印任何 UI 界面,例如 DataGrid 导出到 PDF. 在本篇文章中我们将阐 ...
- sql2008 查询字段所属表
select a.name as 表名, g.*from sysobjects as a left join syscolumns as b on a.id=b.id left JOIN sys.ex ...
- kFreeBSD当前可以做的和不能做的
可以进行FAMP FreeBSD.Apache/Nginx.Mysql/PostGreSQL.PHP/Perl/Python 虚拟化 最易用的VirtualBox 无法安装 Java OpenJDK及 ...
- Hibernate Validator
http://docs.jboss.org/hibernate/validator/4.2/reference/zh-CN/html_single/#example-group-interfaces
- 程序设计模式 —— State 状态模式
我应该如何阅读? 本文将使用优雅的文字风格来告诉你什么是状态模式. 注意: 1.在阅读本文之前请保证你已经掌控了 面对对象的思想与 多态的基本概念,否则将难以理解. 2.本文实现将用C++实现,你不一 ...
- mongodb安装与使用
一.在linux服务器中安装mongodb 1.首先你要有一台安装有linux系统的主机 2.从mongoDB官网下载安装包:http://www.mongodb.org/downloads 3.将下 ...
- Linux Shell系列教程之(十七) Shell文件包含
本文是Linux Shell系列教程的第(十七)篇,更多Linux Shell教程请看:Linux Shell系列教程 通过文件包含,可以引用其他文件的内容,也可以将复杂内容分开,使程序结构更加清晰. ...
- 利用jquery实现网页禁止鼠标右键、禁止复制
很多时候,网站的内容辛苦写法被轻松复制,为了不让自己的劳动成果外流,可以利用禁止鼠标右键等方式保护自己的原创内容! 方式1:禁止鼠标右键操作 <script src="http://l ...
- ASP.NET WebAPI 13 Filter
Filter(筛选器)是基于AOP(面向方面编程)的设计,它的作用是Actionr的执行注入额外的逻辑,以达到横切注入的目的. IFilter 在WebAPI中所以的Filter都实现了IFilter ...
- mysql 5.6.33发布
2016-09-06,mysql 5.6.33社区版发布,修复的bug越发减少,而且基本上都是较少使用的特性.