《Shell 编程》02_Shell 变量基础知识

版权声明: https://blog.csdn.net/weixin_42061048/article/details/83302950

《Shell 编程》02_Shell 变量基础知识

标签(空格分隔): Shell


2.1 什么是变量

1)变量定义

  • 简单地说,变量就是用一个固定的字符串(也可能是字符、数字等的组合)代替更多、更复杂的内容,该内容里可能还会包含变量、路径、字符串等其他的内容。
  • 变量是暂时存储数据的地方及数据标记,所存储的数据存在于内存空间中,通过正确地调用内存空间中变量的名字就可以取出与变量对应的数据。使用变量的最大好处就是使程序开发更为方便。

2)变量类型:

  • 环境变量(全局变量)
    • 自定义环境变量
    • bash 内置的环境变量
  • 普通变量(局部变量)

2.2 环境变量

  • 环境变量一般是指用 export 内置命令导出的变量,用于定义 Shell 的运行环境、保证 Shell 命令的正确执行。Shell 通过环境变量来确定登录用户名、命令路径、终端类型、登录目录等,所有的环境变量都是系统全局变量,可用于所有子进程中,这包括编辑器、Shell 脚本和各类应用。

  • 环境变量可以在命令行中设置和创建。但用户退出命令行时这些变量值就会丢失,因此,如果希望永久保存环境变量,可在用户家目录下的 .bashrc 或 .bash_profile 文件中,或者全局配置 /etc/bashrc 或 /etc/profile 文件中定义。在将环境变量放入上述的文件中后,每次用户登录时这些变量都将被初始化。

  • 按照系统规范,所有环境变量的名字均采用大写形式。在将环境变量应用于用户进程程序之前,都应该用 export 命令导出定义,例如:正确的环境变量定义方法为 export YLT=1。

  • 在查看设置的变量时,有 3 个命令可以显示变量的值:set、env 和 declare。

    • set 输出所有的变量,包括全局变量和局部变量;
    • env 只显示全局变量;
    • declare 输出所有的变量、函数、整数和已经导出的变量;
    • set -o 显示 bash Shell 的所有参数配置信息。

2.2.1 自定义环境变量

1)设置环境变量

export 变量名=value
变量名=value ;export 变量名
declare -x 变量名=value

2)让环境变量永久生效的常用设置文件

用户的环境变量配置

[root@web001 ~]# ls /root/.bashrc
/root/.bashrc
[root@web001 ~]# ls /root/.bash_profile
/root/.bash_profile

全局环境变量的配置

/etc/profile
/etc/bashrc
/etc/profile.d/

2)设置登录提示的两种方式

第一种是在 /etc/motd 里增加提示的字符串,如下

[root@web001 ~]# cat /etc/motd
welcome to ylt linux learning.

登录后显示内容如下

Last login: Mon Oct 22 23:34:51 2018 from 192.168.2.1
welcome to ylt linux learning.

第二种是在 /etc/profile.d 下面增加如下脚本。

[root@web001 ~]# cat /etc/profile.d/yltlogin.sh
echo "welcome to ylt linux learning."

2.2.2 显示与取消环境变量

1)通过 echo 或 printf 命令打印环境变量

  • 常见的系统环境变量
$HOME :用户登录时进入的目录
$UID :当前用户的 UID(用户标识)
$PWD :当前工作目录的绝对路径名
$SHELL :当前 SHELL
$USER :当前用户
[root@web001 ~]# echo $PWD
/root

[root@web001 ~]# printf "$PWD\n"
/root

2)用 env 或 set 显示默认的环境变量

3)用 unset 消除本地变量和环境变量

unset 变量名

2.3 普通变量

2.3.1 定义本地变量

  • 本地变量在用户当前 Shell 生存期的脚本中使用。

1)普通变量定义

变量名=value
变量名='value'
变量名="value"
  • 变量名一般是由字母、数字、下划线组成,可以字母或下划线开头。
  • 变量的内容可以用单引号、双引号或不加引号,但三者含义不同。

2)将一个命令的结果作为变量的内容赋值的方法

变量名=`ls`
变量名=$(ls)
  1. 变量的输出方法
echo $变量名 或 echo ${变量名}
echo '$变量名'
echo "$变量名"
echo `$变量名`

4)经验小结

  • 单纯数字的变量内容可以不加引号;
  • 希望变量原样输出用单引号;
  • 如果有空格且希望解析内容中的变量用双引号;
  • 希望变量值引用命令并获取命令的结果用反引号或$()。

以上为 shell 下的结论,awk 有区别。
awk 加单引号后再同时加双引号即可输出正确结果:

[root@web001 test]# ETT=`pwd`
[root@web001 test]# awk 'BEGIN {print "'$ETT'"}'
/home/ylt/scripts/test

猜你喜欢

转载自blog.csdn.net/weixin_42061048/article/details/83302950
今日推荐