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. 使用PushSharp进行IOS发布应用的消息推送

    在做.NET向IOS设备的App进行消息推送时候,采用的是PushSharp开源类库进行消息的推送,而在开发过程中,采用的是测试版本的app,使用的是测试的p12证书采用的是ApnsConfigura ...

  2. JMS学习(一)基本概念

    这两天面试了一两个公司,由于简历中的最近一个项目用到了JMS,然而面试官似乎对这个很感兴趣,所以都被问到了,但可惜的是,我除了说我们使用了JMS外,面对他们提出的一些关于JMS的问题,我回答得相当差, ...

  3. bootstrap 分页

    1.背景: 前端页面使用bootstrap分页,同时与搜索条件联动: 2. jsp页面由服务端返回后, 异步请求动态创建表格, 分页的数据由服务端第一次返回后初始化, 以后每次异步请求再更新. jsp ...

  4. java多线程(二)——锁机制synchronized(同步方法)

    synchronized Java语言的关键字,可用来给对象和方法或者代码块加锁,当它锁定一个方法或者一个代码块的时候,同一时刻最多只有一个线程执行这段代码.当两个并发线程访问同一个对象object中 ...

  5. mysql启动报错:Starting MySQL...The server quit without updating PID file

    在mysql的data目录下误删除了mysql-bin.000001,mysql-bin.000002等文件,但是没有删除mysql-bin.index文件,此时启动mysql就会报错: Starti ...

  6. 【Asphyre引擎】学习笔记(二)

    转一篇火人论坛那边的一份学习文档,我简单排一下版,希望对入门者有帮助. 感谢China Yang,这份文档也帮助我快速入了门. 和我一起学 Asphyre Sphinx Framework v1.0. ...

  7. 打印机问题win7 和xp

    服务器端问题,重启如下服务 net stop "print spooler" net start "print spooler" gpedit.msc 本地计算 ...

  8. swift学习笔记之-继承

    //继承 import UIKit /* 继承(Inheritance): 1.一个类可以继承(inherit)另一个类的方法(methods).属性(properties)和其它特性.当一个类继承其 ...

  9. Matlab2014a 提示未找到支持的编译器或 SDK的解决方法

    最近在写论文,用到了matlab版本的libsvm,在混合编译的时候遇到的一点小问题. 我电脑上装的是matlab2014a,window7 64位 >> mbuild -setup 错误 ...

  10. HTML <!--...--> 注释 、CSS/JS //注释 和 /*.....*/ 注释

    <!-- -->是HTML的注释标签,使用<和>是符合HTML标签语法规则的. /* */(注释代码块).//(注释单行)是CSS和JS的注释标签. 两种注释有各自的使用环境, ...