【跟晓月学shell脚本】掌握shell脚本变量原理及概念

前言

跟晓月一起学shell,死磕shell脚本,让shell脚本学习不再难。

想学习更多shell脚本的案例,可以前往我的师父的shell脚本专栏:shell脚本从入门到实战-案例篇

一. 什么是变量?

变量是任何一门语言中都不可缺少的组成部分,用于存放各种数据。 脚本语言在使用变量前通常不需要声明类型,只需要直接赋值即可。

变量是计算机编程中用于存储和表示数据的一种命名容器。它们用于在程序中存储、访问和操作各种类型的数据,包括数字、字符串、布尔值等。

变量有两个主要组成部分:变量名和变量值。变量名是标识符,用于在程序中引用该变量。变量值是存储在该变量中的实际数据。

二. 变量分类

2.1 按照变量的作用分

按照变量的作用分:

1、用户自定义变量
2、环境变量:这种变量中主要保存的是和系统操作环境相关的数据。
3.位置参数变量:这种变量主要是用来向脚本当中传递参数或数据的,变量名不能自定义,变量作用是固定的。
4、预定义变量:是Bash中已经定义好的变量,变量名不能自定义,变量作用也是固定的。

2.2 按照变量的作用域分

  • 全局变量
    全局变量是环境变量,其值不随shell 脚本的执行结束而消失。
  • 局部变量
    局部变量是shell 程序内部定义的,其使用范围仅限于定义它的程序,对其它程序不可见。包括:用户自定义变量、位置变量和预定义变量。

全局变量就是系统环境变量:
局部变量,一般指用户自定义变量和一些临时的变量,比如位置和预定义。

在Linux系统中,常见的环境变量配置文件有以下几种:

  • ~/.bashrc:这是用户的环境变量,位于用户的主目录下。可以在该文件中设置用户特定的环境变量和自定义的别名。该文件在用户登录时执行一次。

  • ~/.bash_profile:这是用户登录时bash shell执行的主配置文件,位于用户的主目录下。可以在该文件中设置用户特定的环境变量和自定义的别名。该文件在用户登录时执行一次。

  • /etc/profile:这是系统范围的全局配置文件,适用于所有用户。可/etc/profile的文件中编辑的任意变量都是系统环境变量

  • /etc/bashrc:这是系统范围的bash shell配置文件,适用于所有用户。可以在该文件中设置系统范围的环境变量和全局别名。该文件在每次打开新的终端或登录时执行。

  • /etc/environment:这是一个全局的环境变量配置文件,适用于所有用户。该文件简单地定义了键值对形式的环境变量,不支持脚本和复杂的操作。

三. 变量的定义与查看

3.1 环境变量

printenv 可以打印所有的环境变量

[root@mufeng41 ~]# vim /etc/hosts
[root@mufeng41 ~]# printenv
XDG_VTNR=1
SSH_AGENT_PID=17381
XDG_SESSION_ID=2
HOSTNAME=localhost.localdomain
IMSETTINGS_INTEGRATE_DESKTOP=yes
VTE_VERSION=5202
TERM=xterm-256color
SHELL=/bin/bash
XDG_MENU_PREFIX=gnome-
HISTSIZE=1000
GNOME_TERMINAL_SCREEN=/org/gnome/Terminal/screen/fb6cd2d7_7466_4574_9642_7bb3547161d8
QTDIR=/usr/lib64/qt-3.3
QTINC=/usr/lib64/qt-3.3/include

备注:使用时要在环境变量前添加$

系统定义的变量 意义
BASH=/bin/bash Bash Shell 名称
BASH_VERSION=4.1.2(1) Bash 版本
HOME=/home/linuxtechi 用户家目录
LOGNAME=LinuxTechi 当前登录用户的名字
OSTYPE=Linux 操作系统类型
PATH=/usr/bin:/sbin:/bin:/usr/sbin 可执行文件搜索路径
PWD=/home/linuxtechi 当前工作目录
SHELL=/bin/bash Shell 名称
USERNAME=linuxtechi 当前登录的用户名

示例:

[root@mufeng41 ~]# echo $BASH
/usr/bin/bash
[root@mufeng41 ~]# echo $SHELL
/bin/bash

3.2 特殊变量

特殊变量中包含了位置变量

$0       当前脚本的名称;
$n       当前脚本的第n个参数,n=1,2,…9;
$*$@   当前脚本的所有参数(不包括程序本身);
$#       当前脚本的参数个数(不包括程序本身);
$?       命令或程序执行完后的状态,返回0表示执行成功;
$$       程序本身的PID号。
$!:最后一个在后台运行的进程的进程ID。
$IFS:字段(单词)分隔符的值,用于定义Shell中的字段分割行为,默认为空格、制表符和换行符。
$RANDOM:一个随机整数值。
$PIPESTATUS:最后一个管道命令中各个命令的退出状态码。
$LINENO:当前执行的代码行号。
$SECONDS:自脚本启动后的秒数。

3.3 用户自定义变量

用户自定义变量的作用域是 :当前的shell

1.基本语法
(1)定义变量:变量=值
(2)撤销变量:unset 变量,可以重新进行赋值

声明静态变量:readonly变量,注意:不能unset取消,只能刷新shell

readonly 是一个Shell命令,用于将变量设置为只读(read-only)。一旦变量被设置为只读,就无法对其进行修改或重新赋值。这可以保护重要的变量免受意外的修改。

使用 readonly 命令可以确保某个变量的值在脚本执行期间保持不变。这对于脚本的稳定性和安全性非常重要,尤其是当脚本中有关键的配置参数或其他敏感数据时。

[root@mufeng41 ~]# readonly a=2
[root@mufeng41 ~]# echo $a
2
[root@mufeng41 ~]# a=3
bash: a: 只读变量

如果要取消怎么办? 退出当前的shell或者重新刷新shell,比如bash命令

[root@mufeng41 ~]# bash
[root@mufeng41 ~]# echo $a

2. 变量的使用案例

[root@mufeng41 ~]# a=4
[root@mufeng41 ~]# echo $a
4

总结

本节我们探讨了shell脚本的变量,下一节我们一起探讨shell的变量使用案例。

猜你喜欢

转载自blog.csdn.net/wisdom_futrue/article/details/131313019