shell脚本变量

一、简介

       变量是任何一种编程语言都必不可少的组成部分,变量用来存放各种数据。脚本语言在定义变量时通常不需要指明类型,直接赋值就可以,Shell变量也遵循这个规则。

       在Bash shell 中,每一个变量的值都是字符串,无论你给变量赋值时有没有使用引号,值都会以字符串的形式存储。这意味着,Bash shell 在默认情况下不会区分变量类型,即使你将整数和小数赋值给变量,它们也会被视为字符串,这一点和大部分的编程语言不同。如C/C++ ,变量分为整数、浮点数、字符串、布尔等多种类型。当然,如果有必要,你也可以使用declare/typeset Shell内建命令显式定义变量的类型,但在一般情况下没有这个需求,Shell 开发者在编写代码时自行注意值的类型即可。

二、变量类型

1、根据变量的生效范围可分为

  • 环境变量(全局变量):全局生效,在任何bash环境中都可以识别。

  • 局部变量:生效范围为当前shell进程。对当前shell之外的其它shell进程,包括当前shell的子shell进程均无效。

  • 本地变量:生效范围为当前shell进程中某代码片断,通常指函数。 只能在定义它们的函数/脚本内部中使用。

2、根据是否由系统定义可分为

  • 内置变量:由系统维护,用于设置工作环境。如PS1,PATH,HISTSIZE, HOSTNAME,USER。
  • 自定义变量:由用户自己定义、修改和使用。

3、特殊变量

1)环境变量(全局变量):全局生效,在任何bash环境中都可以识别。

需要记住的常用环境变量:

  • $PATH 表示可执行文件的默认路径
  • $USER 表示用户名称
  • $HOME 表示用户的宿主目录
  • $LANG 表示语言和字符集
  • $PWD 表示当前所在工作目录

shell脚本变量_第1张图片

 环境变量的特性:

  • 可以使子进程(包括孙子进程)继承父进程的变量,但是无法让父进程使用子进程的变量。
  • 一旦子进程修改从父进程继承的变量,将会新的值传递给孙子进程。
  • 一般只在系统配置文件中使用,在脚本中较少使用。

  环境变量的配置文件:

       自定义的环境变量只是临时生效,退出系统后就会失效。需要将自定义的环境变量放入配置文件中,才会永久生效。配置文件可以用来长期变更或设置环境变量。

全局配置文件: /etc/profile

用户独立的配置文件: ~/.bash_profile

操作过程:

shell脚本变量_第2张图片

2)只读变量:read only, 只可以读取不可以更改。

只读变量只能被赋值一次。只读变量在取得初始值之后,只能进行读取操作,不能重新赋值或删除

操作过程:

shell脚本变量_第3张图片

 3)位置变量: 通过命令行给脚本传递参数 。n(n是正整数),n(n是正整数),n(n是正整数),{10} 要加花括号。

操作过程:

shell脚本变量_第4张图片shell脚本变量_第5张图片

4)预定义变量:用来保持脚本程序的执行信息。

  • $0 :当前脚本名称(如果是软链接,显示当前软链接文件名)。
  • $? :查看上一次命令的执行状态,返回0为正常,非0为错误。
  • $* :返回所有参数,当整体返回。
  • $@ :返回所有参数,当个体返回。
  • $# :获取当前shell命令行中参数的总个数。
  • $_ :在此之前执行的命令或脚本的最后一个参数。
  • $$ :获取当前进程的PID。

操作过程:

测试$?的作用shell脚本变量_第6张图片

测试$0、$$、$#、$@的作用 shell脚本变量_第7张图片 

三、符号的作用

  • 双引号" ":会把引号的内容当成整体来看待。强引用,识别变量,允许通过$符号引用其他变量值。
  • 单引号' ':会把引号的内容当成整体来看待。弱引用,禁止引用其他变量值,单引号内的内容都会被认为是普通字符。
  • 反撇号` ` 和 $() :调用命令执行后输出的结果。如果存在嵌套,不能使用反撇号。
  • 花括号{ } :定义变量范围。 echo ${color}${price}

shell脚本变量_第8张图片

你可能感兴趣的:(linux,运维)