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变量的更多相关文章

  1. shell script 学习笔记-----命令执行

    1.PATH变量:shell最主要的功能就是执行用户输入的命令,例如当用户输入一条“ls”命令之后,shell就要找到该命令对应的文件并执行.通常shell都会设置一个名叫PATH的环境变量,其中保存 ...

  2. shell script 学习笔记-----if,for,while,case语句

    1.if内的判断条件为逻辑运算: 2.if内的判断条件为目录是否存在,文件是否存在,下图先检验目录/home/monster是否存在,然后再检测/home/monster中的file.txt文件是否存 ...

  3. shell script 学习笔记-----标准输出

    1.将标准输出(stdout)和标准错误输出(stderr)分别重定向到两个不同的文件 其中符号'>'默认将标准输出重定向,意思和'1>'相同,‘2>'表示重定向标准错误输出,数字1 ...

  4. Linux shell 菜鸟学习笔记....

    20171123 Linux shell 基础学习笔记1. shell 的开始 一般是 #!/bin/bash 通过 #! 来唯一指定使用的shell路径 其他的 # 都表示注释.2. shell 的 ...

  5. shell script 入门 笔记

    shell script 入门 在 shell script 注意必须使用完全相同写在下面: 1.  指令的运行是从上而下.从左而右的分析与运行: 2.  指令的运行就如同第五章内提到的: 指令.选项 ...

  6. ES6学习笔记之变量的解构赋值

    变量的解构赋值 ES6允许按照一定模式,从数组和对象中提取值,对变量进行赋值,这被称为解构. 数组的解构赋值 以前,为变量赋值,只能直接指定值: 1 2 3 var a = 1; var b = 2; ...

  7. bash shell学习-shell script基础 (笔记)

    A chain no stronger than its weakest link. "一着不慎,满盘皆输" 参考资料:鸟哥的Linux私房菜 基础学习篇(第三版)  Linux ...

  8. Shell学习笔记 - Shell变量

    一.变量的命名 变量名必须以字母或下划线开头,由字母.数字.或下划线组成,变量名的长度不能超过255个字符. 二.变量的分类 1. 用户自定义变量 2. 环境变量 3. 位置参数变量 4. 预定义变量 ...

  9. shell学习笔记3---shell变量

    Shell变量的定义.赋值和删除 脚本语言在定义变量时通常不需要指明类型,直接赋值就可以,Shell 变量也遵循这个规则. 在 Bash shell 中,每一个变量的值都是字符串,无论你给变量赋值时有 ...

随机推荐

  1. 随心所欲导出你的 UI 界面到 PDF 文件

    使用 C1PDF 控件可以导出文件到 PDF 文件,结合 .NET 平台特性你可以在任何客户端生成自定义报表.你可以打印任何 UI 界面,例如 DataGrid 导出到 PDF. 在本篇文章中我们将阐 ...

  2. sql2008 查询字段所属表

    select a.name as 表名, g.*from sysobjects as a left join syscolumns as b on a.id=b.id left JOIN sys.ex ...

  3. kFreeBSD当前可以做的和不能做的

    可以进行FAMP FreeBSD.Apache/Nginx.Mysql/PostGreSQL.PHP/Perl/Python 虚拟化 最易用的VirtualBox 无法安装 Java OpenJDK及 ...

  4. Hibernate Validator

    http://docs.jboss.org/hibernate/validator/4.2/reference/zh-CN/html_single/#example-group-interfaces

  5. 程序设计模式 —— State 状态模式

    我应该如何阅读? 本文将使用优雅的文字风格来告诉你什么是状态模式. 注意: 1.在阅读本文之前请保证你已经掌控了 面对对象的思想与 多态的基本概念,否则将难以理解. 2.本文实现将用C++实现,你不一 ...

  6. mongodb安装与使用

    一.在linux服务器中安装mongodb 1.首先你要有一台安装有linux系统的主机 2.从mongoDB官网下载安装包:http://www.mongodb.org/downloads 3.将下 ...

  7. Linux Shell系列教程之(十七) Shell文件包含

    本文是Linux Shell系列教程的第(十七)篇,更多Linux Shell教程请看:Linux Shell系列教程 通过文件包含,可以引用其他文件的内容,也可以将复杂内容分开,使程序结构更加清晰. ...

  8. 利用jquery实现网页禁止鼠标右键、禁止复制

    很多时候,网站的内容辛苦写法被轻松复制,为了不让自己的劳动成果外流,可以利用禁止鼠标右键等方式保护自己的原创内容! 方式1:禁止鼠标右键操作 <script src="http://l ...

  9. ASP.NET WebAPI 13 Filter

    Filter(筛选器)是基于AOP(面向方面编程)的设计,它的作用是Actionr的执行注入额外的逻辑,以达到横切注入的目的. IFilter 在WebAPI中所以的Filter都实现了IFilter ...

  10. mysql 5.6.33发布

    2016-09-06,mysql 5.6.33社区版发布,修复的bug越发减少,而且基本上都是较少使用的特性.