Shell变量和引用

变量的定义

本质上讲,变量就是在程序中保存用户数据的一块内存空间,而变量名就是这块内存空间的地址

在程序的执行过程中,保存数据的内存空间的内容可能会不断地发生变化,但是,代表内存地址的变量名却保持不变

变量的命名

变量名可以由字母、数字或者下划线组成,并且只能以字母或者下划线开头

用户应该尽可能选择有明确意义的英文单词作为变量名,尽量避免使用拼音或者毫无意义的字符串作为变量名。这样的话,用户通过变量名就可以了解该变量的作用

变量的类型

根据数据类型分类

shell是一种动态类语言和弱类型语言

强类型语言

强类型语言,当你定义一个变量是某个类型,如果不经过代码显式转换强制转化

过,它就永远都是这个类型,如果把它当做其他类型来用,就会报错

弱类型语言

弱类型语言,你想把这个变量当做什么类型来用,就当做什么类型来用,语言的解析器

会自动隐式转换

根据作用域分类

全局变量

环境变量也可称为全局变量,可以在创建它们的shell及其派生出来的任意子进程shell中

使用(su - 切换用户会读取新的环境变量),环境变量又可分为自定义环境变量和bash内置

的环境变量

用户的环境变量配置
~/.bash_profile或者~/.bashrc
全局环境变量的配置
/etc/bashrc或/etc/profile或者/etc/profile.d

注意:

按照系统规范,所有环境变量的名字均采用大写形式。在将环境变量应用于用户

进程程序之前,都应该用命令export导出

局部变量

普通变量也可称为局部变量,与全局变量相比,局部变量的使用范围较小,通常仅限于

某个程序段访问,例如函数内部。在Shell语言中,可以在函数内部通过local关键字定义局部

变量,另外,函数的参数也是局部变量

变量的定义

在Shell中:

通常情况下用户可以直接使用变量,而毋需先进行定义,当用户第一次使用某

个变量名时,实际上就同时定义了这个变量,在变量的作用域内,用户都可以使用该变量

#变量名=变量值
[root@localhost shell]# a=8
[root@localhost shell]# echo $a
8

#可以使用反引号`` 或者$(命令)来把一个命令的结果赋值给变量
变量名=`ls`
变量名=$(ls)
[root@localhost shell]# f=`ls`
[root@localhost shell]# echo $f
example1.sh read01.sh

小贴士:

  • 赋值的时候=的左右不能有空格

  • 当内容中存在特殊字符或者空格的时候建议使用 " "括起来

引用变量: $变量名 或者 ${变量名}

查看变量:echo $变量名

取消变量: unset 变量名

位置参数和预定义变量

从命令行传递给Shell脚本的参数又称为位置参数,Shell脚本会根据参数的位置使用不同的位

置参数变量读取它们的值

变量

说明

$#

命令行参数的个数

$n

表示传递给脚本的第n个参数,例如$1表示第一个参数,$2表示第二个参数,$3表示第三个参数

$o

当前脚本的名称

$*

以"参数1 参数2 参数3…"的形式返回所有参数的值

$@

以"参数1""参数2""参数3"…的形式返回所有的值

$?

前一个命令或者函数的返回状态码。$?的返回值用法:

(1)判断命令、脚本或函数等程序是否执行成功

(2)若在脚本中调用执行“exit 数字”,则会返回这个数字给“$?”变量

(3)如果是在函数里,则通过“return 数字”把这个数字以函数值的形式传给“$?”

$$

返回本程序的进程ID(PID),不常用

$!

获取上一个在后台工作的进程的进程号

$_

保存之前执行的命令的最后一个参数

Shell变量和引用_第1张图片
Shell变量和引用_第2张图片

Shell中的引用

转义字符\

如果将\放到特殊字符前面,shell就忽略这些特殊字符的原有含义,把它们当作普通字符对待

'' 单引号

如果将字符串放到一对单引号之间,那么字符串中所有字符的特殊含义被忽略

""双引号

双引号的引用与单引号基本相同,包含在双引号内的大部分特殊字符可以当作普通字符处理,但是仍然有一些特殊字符保留自己的特殊含义

包括 $ 和\和 `

[root@localhost ~]# echo "current user is: $USER"
current user is: root
[root@localhost ~]# echo 'current user is: $USER'
current user is: $USER
[root@localhost ~]# echo 'current user is: `whoami`'
current user is: `whoami`
[root@localhost ~]# echo "current user is: `whoami`"
current user is: root

你可能感兴趣的:(linux,shell,xshell)