$    变量替换操作符。

只有在变量被声明,赋值,unset 或exported 或者是在变量代表一个signal 的时候,
变量才会是以本来的面目出现在脚本里.变量在被赋值的时候,可能需要使用”=”,
read状态或者是在循环的头部.
在”"中还是会发生变量替换,这被叫做部分引用,或叫弱引用.而在”中就不会发生变
量替换,这叫做全引用,也叫强引用.
注意:$var 与${var}的区别,不加{},在某些上下文将引起错误,为了安全,使用2.

shell中的一半变量都是全局的  整个脚本中都能用

Example1:

[cce]
#!/bin/basha=123hello=$a                            # 强烈注意,在赋值的前后一定不要有空格.echo hello                          # 没有变量引用,不过是个hello 字符串echo $hello                         #输出123echo ${hello}                       # 同上echo "$hello"                       # 同上
echo "${hello}"                     # 同上hello="A B      C            D"echo $hello                                  # A B C Decho "$hello"                              # A B      C            D# 引用一个变量将保留其中的空白,当然,如果是变量替换就不会保留了echo '$hello'                              # $hello   这就是全引用的效果。hello= # 设置为空值echo "\$hello (null value) = $hello"# 注意设置一个变量为空,与unset 它,不是一回事,虽然看起来一样var1=21 var2=22 var3=$V3    # 可以在同一行上设置多个变量.空格分开echo "var1=$var1 var2=$var2 var3=$var3"      # var1=21 var2=22 var3=23uninitialized_variable=23                   # 赋值unset uninitialized_variable              #unset  取消赋值echo "$uninitialized_variable"          #输出 空值echo "$uninitialized"                                  # 引用未定义变量会报错
let "uninitialized += 5"                               # 但是可以用未定义变量做算数运算
echo "$uninitialized"                                  # 运算中未定义变量为0
[/cce]

Example2:

[cce]
#!/bin/basha=123                                 # = 号赋值let a=12+2                       #let 也可赋值for a in 7 8 9 11              #for 也可以赋值do
echo -n "$a "doneread a                             #read 赋值 a=`ls -l`    或    a=$(ls -l)          #这两个都可用于命令替换echo $a                         # 别忘了,这么引用的话,ls 的结果中的所有空白部分都没了(包括换行)echo "$a"                      # 这么引用就正常了,保留了空白
[/cce]

注意:bash变量是没有类型的,

Bash 变量都是字符串.
但是依赖于上下文,Bash 也允许比较操作和算术操作.决定这些的关键因素就是,变量中的值
是否只有数字.

例:

[cce]
#!/bin/basha=123                                  #a整型let "a+=1"                           #a整型 124b=${a/12/BB}                #b=BB4 字符型declare -i b                       # 即使使用declare 命令也不会对此有任何帮助let "b += 1"                       # BB4 + 1 =1   字符型在运算中相当于0d=${b/BB/23}              #d=234  变为了整型
[/cce]

三种特殊类型的变量:

local           只有在代码块或函数中见到。局部变量,作用域只在代码块或是函数中。

environmental        这种变量将改变用户接口和 shell 的行为.

positional parameters        命令中传进的值。,$0, $1, $2, $3…    其中 $0就是脚本文件的名字,,$1 是第一个参数,$2 为第2 个,

9
以后就需要打括号了,如${10},${11},${12}…两个值得注意的变量$*和$@,表示所有的位置参数.

如脚本test运行要4个参数 执行:  ./test 1 2 3 4 ……这是  test脚本中的$0=test  $1=1   $2=2 ..$#=4(参数个数)  $*=1 2 3 4(所以参数)

shift              shift 命令重新分配位置参数,其实就是向左移动一个位置.
$1 <— $2, $2 <— $3, $3 <— $4, 等等.
老的$1 将消失,但是$0(脚本名)是不会改变的.如果你使用了大量的位置参数,那么
shift命令允许你存取超过10 个参数.虽然{}表示法也允许这样.

转载于:https://blog.51cto.com/zoushj/1400521

SHELL中的变量和参数相关推荐

  1. shell中的变量及运算符

     变量赋值与环境 语法 export name[=word] export –p readonly name[=word] readonly –p export用于修改或打印环境变量,readon ...

  2. 学习linux杂七杂八——关于shell中的变量

    var=value 变量定义并赋值,注意等号前后不能与空格相邻,如果需要有空格(其他特> 殊字符,如$,回车,",',\等)可用转义字符\进行转义. 变量命名规则同C语言. 变量值两端 ...

  3. [转]Shell中脚本变量和函数变量的作用域

     转自:  http://blog.csdn.net/ltx19860420/article/details/5570902   在shell中定义函数可以使代码模块化,便于复用代码.不过脚本本身的变 ...

  4. linux——shell 中的变量

    变量的定义 变量,即在程序运行过程中它的值是允许改变的量 变量是用一串固定的字符来标示不固定的值的一种方法 变量是一种使用方便的占位符,用于引用计算机内存地址,该地址可以存储 Script 运行时可更 ...

  5. Bash Shell中命令行选项/参数处理

    http://www.cnblogs.com/FrankTan/archive/2010/03/01/1634516.html 0.引言 写程序的时候经常要处理命令行参数,本文描述在Bash下的命令行 ...

  6. linux利用位置参数数组,Shell编程1_变量、参数和数组

    目录 一.从变量开始 1.环境变量 export命令 2.系统自带的环境变量 3.变量的定义和赋值 二.使用参数 参数的获取 三.数组的基本使用 1.数组的定义 2.数组的删除 3.数组的切片和替换 ...

  7. Linux Shell中的变量-环境变量

    参考:<Linux命令 / 编辑器与Shell编程> ################################################ note that :与其他编程语言 ...

  8. linux脚本判断变量存在,shell中关于变量是否存在的问题

    [TOC] ## fish shell判断某个变量是否存在 fish shell 判断变量是否存在直接使用 `test 变量`就可以,然后我们使用`and`和`or`实现if..else..的逻辑.如 ...

  9. (2)shell编程学习 Shell中的变量(预设变量表)及变量定义与特殊变量 (脚本小子的进阶之路)

    这里尽量以较简略的篇幅讲解,如果之前有Python PHP语言基础的话,学习应该非常快.当然文章篇幅有限,只能讲一些主要的地方,一些偏的知识可能不讲. 目录 变量 局部变量 环境变量 自定义环境变量 ...

最新文章

  1. 提高ActiveMQ工作性能
  2. idea设置新增文件,自动添加到git
  3. struct和typedef struct彻底明白了
  4. 贾跃亭发文祝父亲节快乐:FF就像我的孩子
  5. 【ElasticSearch】Es 源码之 IndicesClusterStateService 源码解读
  6. 密钥怎么存储在数据库中
  7. Coolite服务端方法调用与Web.Config配置
  8. IE Developer ToolBar,这是IE用于调试页面的小工具
  9. sql server2012 远程访问设置(转)
  10. 游戏对战平台研究终结
  11. 计算机网络——域名系统
  12. c语言srand函数
  13. win10 服务(本机)在哪里打开? 怎么样打开系统服务窗口?
  14. BFS解决一般性的泊松分酒问题
  15. AI 入门怎么学?这份学习指南请收好!
  16. python计算协方差_在Python中计算协方差
  17. Ubuntu 16.04通过Trickle限制某个软件的下载/上传速度
  18. ionic字符串截取数字
  19. Dynamic Debug [dyndbg] 概述
  20. c++解一元三次方程

热门文章

  1. Spring Bean垃圾回收
  2. 加入域时出现以下错误:找不到网络路径
  3. React从入门到精通系列之(14)refs和DOM元素
  4. CentOS中获取文件的前四个字节的16进制值
  5. 【求助】Android开发中的数据持久化
  6. 黑马程序员_面向对象的三大特征
  7. Windows Server 8 Tips (二) Hyper-V 3:用PowerShell导出和导入虚拟机
  8. from py4j.protocol import Py4JError ModuleNotFoundError 错误
  9. 第3章 系统设计和架构设计【扩胸运动,有容乃大】
  10. POSIX 信号量和互斥锁