shell脚本变量
- 1.变量概述
- 1.1变量类型
- 1.2变量的命令要求
- 1.3 变量作用范围
- 1.4几个符号作用
- 2.局部变量
- 3.环境变量
- 3.1系统内置环境变量
- 4. 只读变量
- 5.位置变量
- 6.预定义变量
- 7.四个配置文件作用
1.变量概述
- 变量即在程序运行过程中它的值是允许改变的量
- 变量是用一串固定的字符串去表示不固定的内容
- 变量表示命令的内存空间,将数据放在内存空间中,通过变量名引用,获取数据
变量作用:
用来存放系统和用户需要使用的特定参数
- 变量名:使用固定的名称,由系统预设或定义用户
- 变量值:能够根据用户设置,系统环境的变化而变化
1.1变量类型
变量赋值:变量名=变量值
bash变量类型:
1.根据变量的生效范围可分为:
-
环境变量:全局生效,在任何bash环境中都可以识别
-
局部变量;生效范围为当前shell进程,对当前shell之外的其它shell进程,包括当前shell的子shell进程均无效
-
本地变量:生效范围为当前shell进程中某代码片段,通常指函数,只能在定义他们的函数、脚本内部使用
2.根据是否由系统定义可分为: -
内置变量:由系统维护,用于设置工作环境
-
自定义变量:由用户自己定义,修改和使用
3.特殊变量: -
环境变量:全局生效,在任何bash环境中都可以识别
-
只读变量:只可以读取不可以更改
-
位置变量;通过命令行给脚本传递参数。
-
预定义变量;用来保持脚步程序的执行信息
- $0:当前脚本名称 - $?:查看上一次命令的执行状态,返回0为正常,非0为错误 - $*:返回所有参数,当整体返回 - $@:返回所有参数,当个体返回 - $#:获取当前shell命令行中参数的总个数 - $$;获取当前进程的pid
1.2变量的命令要求
- 区分大小写
- 不使用程序中的保留子和内置变量名称:如:if ,for,hostename
- 只能使用数字,字母及下划线,且不能以数字开头,注意:不支持短横线“-”,和主机名相反
- 使用英文时,尽量使用词义通俗易懂
1.3 变量作用范围
默认情况下,新定义的变量只在当前隔的shell环境中有效,因此称为局部变量,当进入子程序或新的shell环境中,局部变量将无法再起作用
可以通过内部命令export将指定的变量为全局变量,使用户定义的变量在所有子shell环境中可以继续使用
1.法一,设置全局变量:
export name=value
或 declare -x name=value
2.法二,将局部变量转变为全局变量:export name
1.4几个符号作用
双引号" ":会把引号的内容当成整体来看待。强引用,识别变量,允许通过$符号引用其他变量值。
单引号’ ':会把引号的内容当成整体来看待。弱引用,禁止引用其他变量值,单引号内的内容都会被认为是普通字符。
反撇号
和 $() :调用命令执行后输出的结果。如果存在嵌套,不能使用反撇号。
花括号{ } :定义变量范围。 echo
c
o
l
o
r
{color}
color{price}
2.局部变量
定义变量:变量名=变量值
引用变量;
变量名
=
变量名=
变量名={变量名}
查看变量:
- echo $变量名:查看单个变量
- set:产看所有变量,包括局部变量和环境变量
取消变量:unset 变量名
作用范围;仅在当前shell环境中有效,无法在子shell环境中使用
3.环境变量
3.1系统内置环境变量
1.由系统提前创建,用来设置用户的工作环境
2.使用env命令查看所有环境变量
3.需要记住的常用环境变量;
- $PATH 表示可执行文件的默认路径
- $USER 表示用户名称
- $HOME 表示用户的宿主目录
- $LANG 表示语言和字符集
- $PWD 表示当前所在工作目录
4.环境变量的特性 - 可以使子进程继承父进程的变量,但是无法让父进程使用子进程的变量
- 一旦子进程修改层父进程继承的变量,将会新的值传递给孙子进程
- 一般只在系统配置文件中使用,在脚本中较少使用
4. 只读变量
1.我们在定义shell变量时,默认定义的变量是可以修改的,但有一种变量是不能修改的,就是只读变量
2.只读变量只能被赋值一次。只读变量在取得初始值之后,只能进行读取操作,不能重新赋值或删除
5.位置变量
位置变量也称为位置参数
使用$n表示,n为数字序号,且必须为整数
[root@localhost ~]# cat weizhi.sh
#!/bin/bash
echo “$1” #显示位置1的参数
echo “$2” #显示位置2的参数
echo “$3” #显示位置3的参数
[root@localhost ~]# bash weizhi.sh aaa bbb ccc
aaa //对应$1
bbb //对应$2
ccc //对应$3
6.预定义变量
预定义变量是系统定义好的变量,用来保持脚本程序的执行信息。
可以直接使用这些变量,不能直接为这些变量赋值。
$* 和 $@的区别:
- 不加双引号的话,$* 和 $@ 都代表脚本后面跟的所有参数。
- 加上双引号的话," ∗ " 会把所有参数当作一个整体去看待(此时参数数量为 1 ), " *"会把所有参数当作一个整体去看待(此时参数数量为1)," ∗"会把所有参数当作一个整体去看待(此时参数数量为1),"@"会把脚本后面跟的每一个参数当作一个个体去看待。
7.四个配置文件作用
1、/etc/profile 文件
系统级的配置文件,开机时系统自动加载该文件中的配置。
系统每次启动都会自动执行/etc/profile 文件里的命令,这个文件是对全局有效的(所有的shell环境和用户)。
2、~/.bash_ profile 文件
不同用户登录系统时,会自动执行自己家目录中的~/ .bash_ profile 文件中的命令,之后自动执行~/ . bashrc。(因为~/ .bash_ profile文件中规定了,如果~/ . bashrc是个文件,则执行该文件)。
3、~/.bashrc 文件
当前用户每切换一个shell环境都会自动加载~/ . bashrc 文件中的配置 ,之后自动执行/etc/bashrc文件。(因为~/ . bashrc文件中规定了,如果/etc/bashrc是个文件,则执行该文件)。
4、/etc/bashrc 文件
/etc/bashrc针对所有用户,用户每切换一个shell环境都会自动执行。
5、/etc/skel/ 目录
/etc/skel/是用来存放新用户配置文件的目录,当我们添加新用户的时候,这个目录下的所有文件会自动被复制到新添加的用户的家目录下。这个目录下的所有文件都是隐藏文件(以.开头的文件)。
该目录中包括 .bash_logout 、.bash_profile 、.bashrc 这三个配置文件。