Shell学习小结 - 深入认识变量
2016-10-23 23:00
447 查看
移动端访问不佳,请访问我的个人博客
列如:
这里的
注意在
静态类型语言: 是在编译期间就确定变量类型的语言,例如
动态设计语言: 实在程序执行过程中才确定变量的数据类型的语言。常见的有
根据变量是否强制要求类型定义,可以将程序设计语言分为强类型语言和弱类型语言
强类型语言: 要求用户在定义变量的时候必须明确指定其数据类型,例如
弱类型语言: 不要求用户明确指定变量的数据类型,例如
还可以通过
其中,
单引号: 括起来的字符都做为普通字符出现
双引号: 除”$”、”\”、”
反引号: 括起来的字符串被
反引号的用法:
该执行的结果如下:
在函数内部定义变量,代码如下:
该执行的结果如下:
该执行的结果如下:
从以下代码来比例两种局部变量和全局变量
该执行的结果如下:
注意Shell变量中的符号”"表示取变量的值。只有在取值的时候才使用,定义和赋值是无需使用符号"”,另外,实际上Shell中变量的原型为var,var为简写,在某些情况下,简写会导致程序执行错误。
下面是常用的系统变量的使用方法:
可以使用
使用范例代码:
最近在学习
变量的命名
对于初学者来说,可以简单的理解为,变量就是保存在计算机内存中的一系列的键值对。列如:
str="hello"
这里的
str就是变量名,而
hello就是变量的值
注意在
shell中变量名的大小是敏感的,因此大小写不同的两个变量名并不代表同一个变量
变量的类型
根据变量的类型确实,可以将程序设计语言分为两类,分别是静态类型语言和动态类型语言静态类型语言: 是在编译期间就确定变量类型的语言,例如
JAVA、
C++、
PASCAL,在这些语言中使用变量时,必须首先声明其类型。
动态设计语言: 实在程序执行过程中才确定变量的数据类型的语言。常见的有
VBScript、
PHP及
Python。在这些语言中,变量的数据类型根据第一次赋给该变量的值的数据类型来确定。
根据变量是否强制要求类型定义,可以将程序设计语言分为强类型语言和弱类型语言
强类型语言: 要求用户在定义变量的时候必须明确指定其数据类型,例如
JAVA和
C++。在强类型语言中,数据类型之间的转换非常重要。
弱类型语言: 不要求用户明确指定变量的数据类型,例如
VBScript。用户可以将任意类型的数值赋给该变量。并且,变量的数据类型之间的转换也无需明确进行。
Shell是一种动态类型语言和弱类型语言
变量的定义
在Shell中。通常情况下用户可以直接使用变量,无需先进行定义,当用户第一次使用某个变量名时,实际上就同时定义了这个变量,在变量的作用域内,用户都可以使用该变量。如下所示:
#定义变量a a=1 #定义变量b b="hello" #定义变量c c="hello world"
还可以通过
declare关键字来定义变量,它可以对变量的读写属性和变量类型进行设置,改命令的基本语法:
declare attribute variable
其中,
attribute表示变量的属性,常用的属性如下所诉:
变量 | 说明 |
---|---|
-p | 显示所有变量的值 |
-i | 将变量定义为整数。在之后就可以直接对表达式求值,结果只能是整数。如果求值失败或者不是整数,就设置为0 |
-r | 将变量声明为只读变量。只读变量不允许修改,也不允许删除 |
-a | 变量声明为数组变量。但这没必要。所有变量都不必显式定义就可以用做数组,事实上,在某种意义上,所有变量都是数组,而且赋值给没有下标的变量与赋值给下标为0的数组元素相同。 |
-f | 显示所有自定义函数,包括名称和函数体 |
-x | 将变量设置成环境变量,这样在随后的脚本和程序中可以使用 |
变量与引号
在Shell语言中一共有3种引号,分别为单引号(’ ‘)、双引号(” “)和反引号(“),它们的作用是不同。
单引号: 括起来的字符都做为普通字符出现
双引号: 除”$”、”\”、”
"和" " "这几个字符仍是特殊符并保留其特殊功能外,其余字符仍然做为普通字符对待
反引号: 括起来的字符串被
Shell解释为命令,在执行时,
Shell首先执行改命令,并以它的标准输出结果取代整个反引号(包括两个反引号)部分
反引号的用法:
#输出当前目录 echo "current directory is `pwd`"
变量的作用域
Shell跟其他语言一样,作用域分为全局变量和局部变量。
全局变量
通常认为,全局变量是使用范围较大的变量,不局限某个局部使用。如下:#定义函数 func() { #输出变量的值 echo "$v1" #修改变量的值 v1=200 } #在脚本中定义变量 v1=100 #调用函数 func #输出变量的值 echo "$v1"
该执行的结果如下:
100 200
在函数内部定义变量,代码如下:
#定义函数 func() { #在函数内部定义变量 v2=200 } #调用函数 func #输出变量的值 echo "$v2"
该执行的结果如下:
200
局部变量
与全局变量想比,局部变量的使用范围较小,通常仅限定某个程序段访问,例如函数内部。需要使用local关键字进行定义,另外,函数的参数也是局部变量。如下:
#定义函数 func() { #使用local关键字定义局部变量 local v2=200 } #调用函数 func #输出变量 echo "$v2"
该执行的结果如下:
#并没有输出任何结果,因为v2是局部变量
从以下代码来比例两种局部变量和全局变量
#定义函数 func() { #输出全局变量v1 echo "global variable v1 is $v1" #定义局部变量v1 local v1=2 #输出局部变量v1 echo "local variable v1 is $v1" } #定义全局变量v1 v1=1 #调用函数 func #输出全局变量v1 echo "global variable v1 is $v1"
该执行的结果如下:
global variable v1 is 1 local variable v1 is 2 global variable v1 is 1
注意Shell变量中的符号”"表示取变量的值。只有在取值的时候才使用,定义和赋值是无需使用符号"”,另外,实际上Shell中变量的原型为var,var为简写,在某些情况下,简写会导致程序执行错误。
系统变量
Shell语言的系统变量主要在对参数判断和命令返回值判断时使用,包括脚本和函数参数,已经脚本和函数的返回值。Shell语言中的系统变量并不多,但是十分有用,特别是在做一些参数检测的时候。一些常用的系统变量:变量 | 说明 |
---|---|
#n | n是第一个整数,从1开始,表示参数的位置,例如1表示第1个参数,2表示第2个参数 |
$# | 命令行参数的个数 |
$0 | 当前Shell脚本的名称 |
$? | 前一个命令或者函数的返回状态码 |
$* | 以”参数1”“参数2”……的形式将所有参数通过一个字符串返回 |
$@ | 以”参数1”“参数2”……的形式返回每个参数 |
$$ | 返回本程序的进程ID(PID) |
#输出脚本的参数个数 echo "the number of parameters is $#" #输出上一个命令的退出状态码 echo "the return code of last command is $?" #输出当前脚本的名称 echo "the script name is $0" #输出所有的参数 echo "the parameters are $*" #输出其中的几个参数 echo "\$1=$1;\$2=$2;\$11=${11}"
环境变量
Shell的环境变量是所有Shell程序都可以使用的变量。Shell程序在运行时,都会接收一组变量,这组变量就是环境变量。环境变量会影响到所有脚本的执行结果。如下是一些常用的环境变量:变量 | 说明 |
---|---|
PATH | 命令搜索路径,以冒号为分隔符。注意Windows下不同的是,当前目录不在系统路径里 |
HOME | 用户主目录的路径名,是cd命令的默认参数 |
COLUMNS | 定义了命令编辑模式下可使用命令行的长度 |
HISTFILE | 命令历史文件 |
HISFILESIZE | 命令历史文件中最多可包含的命令条数 |
IFS | 定义Shell使用的分隔符 |
LOGNAME | 当前的登录名 |
SHELL | Shell的全路径名 |
TERM | 终端类型 |
TMOUT | Shell自动退出的时刻,单位为秒,若设置为0则禁止Shell自动退出 |
PWD | 当前工作目录 |
set命令列出系统所有的环境变量:
set | more
'!'=0 '#'=0 '$'=6491 '*'=( ) -=569JNRXghikls 0=-zsh '?'=0 @=( ) ARGC=0 Apple_PubSub_Socket_Render=/private/tmp/com.apple.launchd.A6yPyflyoi/Render BG CDPATH='' COLORFGBG='12;8' COLUMNS=80 CPUTYPE=x86_64 CURRENT_BG=NONE EGID=20 EUID=501 FG FIGNORE='' FPATH=/Users/wangchonglei/.oh-my-zsh/plugins/git:/Users/wangchonglei/.oh-my-zsh/functions:/Users/wangchonglei/.oh-my-zsh/completions:/usr/local/share/zsh/site-functions:/usr/share/zsh/site-functions:/usr/share/zsh/5.2/functions FX
使用范例代码:
#输出命令搜索路径 echo "commands path is $PATH" #输出当前的登录名 echo "current login name is $LOGName" #输出当前用户的主目录 echo "current user's home is $HOME" #输出当前的Shell echo "current shell is $SHELL" #输出当前的工作目录 echo "current path is $PWD"
最近在学习
Shell,把学习中的一些知识点记录下来,供以后自己复习使用。谢谢大家的阅读,有什么问题欢迎指出~~
相关文章推荐
- Shell学习小结 - 深入认识变量
- chapter11:认识与学习bash之(1)认识shell与shell的变量功能
- 学习《深入理解C++对象模型》小结
- shell学习笔记--特殊变量参数
- 【shell】sed学习小结1
- 深入认识学习ASP应用Cookies的技巧
- 轻松学习Linux之Shell预定义变量
- 写得蛮好的linux学习笔记(压缩命令,vi一般用法,认识SHELL,正规表示法)
- Shell 学习笔记(一) 认识 Shell
- 从学习export命令理解到的Shell环境和变量生存期
- 从学习export命令理解到的Shell环境和变量生存期
- Shell脚本学习笔记(二)--变量
- 从学习export命令理解到的Shell环境和变量生存期
- Bash Shell脚本学习小结(转)
- 全面深入认识C变量
- 学习笔记——shell中测试变量是否已经设置
- hibernate 深入学习 小结
- PL/SQL学习笔记-变量作用域及数据类型深入
- 学习数组类时,碰到typeof(),对其实验引起的一连串知识点、学习小结和思考练习(涉及成员对象变量、成员常量、抽象类Type等知识)
- 轻松学习Linux之认识Shell