SHELL中的变量和参数
$ 变量替换操作符。
只有在变量被声明,赋值,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中的变量和参数相关推荐
- shell中的变量及运算符
变量赋值与环境 语法 export name[=word] export –p readonly name[=word] readonly –p export用于修改或打印环境变量,readon ...
- 学习linux杂七杂八——关于shell中的变量
var=value 变量定义并赋值,注意等号前后不能与空格相邻,如果需要有空格(其他特> 殊字符,如$,回车,",',\等)可用转义字符\进行转义. 变量命名规则同C语言. 变量值两端 ...
- [转]Shell中脚本变量和函数变量的作用域
转自: http://blog.csdn.net/ltx19860420/article/details/5570902 在shell中定义函数可以使代码模块化,便于复用代码.不过脚本本身的变 ...
- linux——shell 中的变量
变量的定义 变量,即在程序运行过程中它的值是允许改变的量 变量是用一串固定的字符来标示不固定的值的一种方法 变量是一种使用方便的占位符,用于引用计算机内存地址,该地址可以存储 Script 运行时可更 ...
- Bash Shell中命令行选项/参数处理
http://www.cnblogs.com/FrankTan/archive/2010/03/01/1634516.html 0.引言 写程序的时候经常要处理命令行参数,本文描述在Bash下的命令行 ...
- linux利用位置参数数组,Shell编程1_变量、参数和数组
目录 一.从变量开始 1.环境变量 export命令 2.系统自带的环境变量 3.变量的定义和赋值 二.使用参数 参数的获取 三.数组的基本使用 1.数组的定义 2.数组的删除 3.数组的切片和替换 ...
- Linux Shell中的变量-环境变量
参考:<Linux命令 / 编辑器与Shell编程> ################################################ note that :与其他编程语言 ...
- linux脚本判断变量存在,shell中关于变量是否存在的问题
[TOC] ## fish shell判断某个变量是否存在 fish shell 判断变量是否存在直接使用 `test 变量`就可以,然后我们使用`and`和`or`实现if..else..的逻辑.如 ...
- (2)shell编程学习 Shell中的变量(预设变量表)及变量定义与特殊变量 (脚本小子的进阶之路)
这里尽量以较简略的篇幅讲解,如果之前有Python PHP语言基础的话,学习应该非常快.当然文章篇幅有限,只能讲一些主要的地方,一些偏的知识可能不讲. 目录 变量 局部变量 环境变量 自定义环境变量 ...
最新文章
- 提高ActiveMQ工作性能
- idea设置新增文件,自动添加到git
- struct和typedef struct彻底明白了
- 贾跃亭发文祝父亲节快乐:FF就像我的孩子
- 【ElasticSearch】Es 源码之 IndicesClusterStateService 源码解读
- 密钥怎么存储在数据库中
- Coolite服务端方法调用与Web.Config配置
- IE Developer ToolBar,这是IE用于调试页面的小工具
- sql server2012 远程访问设置(转)
- 游戏对战平台研究终结
- 计算机网络——域名系统
- c语言srand函数
- win10 服务(本机)在哪里打开? 怎么样打开系统服务窗口?
- BFS解决一般性的泊松分酒问题
- AI 入门怎么学?这份学习指南请收好!
- python计算协方差_在Python中计算协方差
- Ubuntu 16.04通过Trickle限制某个软件的下载/上传速度
- ionic字符串截取数字
- Dynamic Debug [dyndbg] 概述
- c++解一元三次方程
热门文章
- Spring Bean垃圾回收
- 加入域时出现以下错误:找不到网络路径
- React从入门到精通系列之(14)refs和DOM元素
- CentOS中获取文件的前四个字节的16进制值
- 【求助】Android开发中的数据持久化
- 黑马程序员_面向对象的三大特征
- Windows Server 8 Tips (二) Hyper-V 3:用PowerShell导出和导入虚拟机
- from py4j.protocol import Py4JError ModuleNotFoundError 错误
- 第3章 系统设计和架构设计【扩胸运动,有容乃大】
- POSIX 信号量和互斥锁