zoukankan      html  css  js  c++  java
  • 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

  • 相关阅读:
    1012 The Best Rank (25 分)(排序)
    1011. World Cup Betting (20)(查找元素)
    1009 Product of Polynomials (25 分)(模拟)
    1008 Elevator (20 分)(数学问题)
    1006 Sign In and Sign Out (25 分)(查找元素)
    1005 Spell It Right (20 分)(字符串处理)
    Kafka Connect 出现ERROR Failed to flush WorkerSourceTask{id=local-file-source-0}, timed out while wait
    flume、kafka、avro组成的消息系统
    Java23种设计模式总结【转载】
    Java编程 思维导图
  • 原文地址:https://www.cnblogs.com/YaoDD/p/4935418.html
Copyright © 2011-2022 走看看