AI智能
改变未来

Shell变量


变量的作用、类型

变量的作用

  • 用来存放系统和用户需要使用的特定参数
  • 变量名:使用固定的名称,由系统预设或用户定义
  • 变量值:能够根据用户设置、系统环境的变化而变化

变量的类型

运行shell时,会同时存在三种变量:

局部变量

局部变量在脚本或命令中定义,仅在当前shell实例中有效,其他shell启动的程序不能访问局部变量。
环境变量

所有的程序,包括shell启动的程序,都能访问环境变量,有些程序需要环境变量来保证其正常运行。必要的时候shell脚本也可以定义环境变量。
shell变量

shell变量是由shell程序设置的特殊变量。shell变量中有一部分是环境变量,有一部分是局部变量,这些变量保证了shell的正常运行

自定义变量

定义新的变量

定义变量的基本格式为 “ 变量名=变量值 ”。
命名只能使用英文字母,数字和下划线,首个字符不能以数字开头。

中间不能有空格,可以使用下划线(_)。不能使用标点符号。不能使用bash里的关键字。

例如定义一个num变量,变量值为10.

[root@localhost ~]# num=10

查看变量的值

使用一个定义过的变量,只要在变量名前面加美元符号即可,如:

[root@localhost ~]# num=10[root@localhost ~]# echo $num10

变量赋值时

  • 双引号:允许通过 $ 符号引用其他变量值
  • 单引号:禁止引用其他变量值, $ 视为普通字符
  • 反撇号:命令替换,提取命令执行后的输出结果

从键盘输入内容为变量赋值

read [-p \"提示信息\" 变量名]

设置变量的作用范围

默认情况下,新定义的变量只在当前的 Shell 环境中有效,因此成为局部变量。当进入子程序或新的字 Shell 环境时,局部变量将无法在使用。例如,直接执行 bash 进入一个新的字 Shell 脚本后,将无法引用父级 Shell 环境中定义的 num 变量。

[root@localhost ~]# num=10[root@localhost ~]# echo $num10[root@localhost ~]# bash[root@localhost ~]# echo $num[root@localhost ~]#

数值变量的运算

在 bash shell 环境中,只能进行简单的整数运算,不支持小数运算。整数值的运算主要通过内部命令 expr 进行,基本格式如下。

expr 变量1 运算符 变量2 [ 运算符 变量3 ]…

其中,变量1、变量2…对应为需要计算的数值变量,需要以$符号调用,常用的几种运算符如下:

运算符 意义
++ – 增加及减少,可前置也可放到结尾
\\ * / % 乘、除、取余
+ – 加法、减法
< <= > >= 比较符号
= = != 等于、不等于
& 位的与
^ 位的异或
位的或
&& 逻辑的与
丨丨 逻辑的或
?: 条件表达式
= += -= *= /= %= &= ^= <<= >>= 丨= 赋值运算符 a+=1 相当于 a=a+1

特殊变量

环境变量

  • 由系统提前创建,用来设置用户的工作环境
  • 配置文件:/etc/profile、~/.bash_profile

常见的环境变量

  • PWD、PATH
  • USER、SHELL、HOME

只读变量

使用 readonly 命令可以将变量定义为只读变量,只读变量的值不能被改变。

[root@localhost ~]#num=10[root@localhost ~]# readonly num #设置为只读变量[root@localhost ~]# num=20bash: num: 只读变量

使用 unset 命令可以删除变量,不能删除只读变量。语法如下:

unset 变量名

位置变量

位置变量也称为位置参数,使用 $1、$2、$3、$4、$5、$6、$7、$8、$9表示。
第一个字段表示命令名或脚本程序名,其余的字符串参数按照从左到右的顺序依次赋值给位置变量。

预定义变量

预定义变量是由 Bash 程序预先定义好的一类特殊变量,用户只能使用预定义变量,而不能创建新的预定义变量,也不能直接为预定义变量赋值。预定义变量使用 “ $ ” 符号和另一个符号组合表示,较常用的几个预定义变量的含义如下。

  • $#:表示命令行中位置参数的个数。
  • $*:表示所有位置参数的内容。
  • $?:表示前一条命令执行后的返回状态,返回值为 0 表示执行正确,返回任何非 0 值均表示执行出现异常。
  • $0:表示当前执行的脚本或程序的名称。
赞(0) 打赏
未经允许不得转载:爱站程序员基地 » Shell变量