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

2023-06-20 18:47:23

前言

跟晓月一起学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/bashBash 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/bashShell 名称
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的变量使用案例。

更多推荐

华为云香港S3云服务器性能测评_99元一年租用价格

华为云香港S3云服务器1核2G1M带宽99元一年性能测评,配置为S3云服务器1核2G1M带宽,S系列热卖机型,适用于个人建站、普通web应用等负载较低场景,系统盘为高IO40G系统盘,华为云百科分享华为云香港云服务器配置费用:目录华为云香港云服务器租用费用S3云服务器性能测评华为云香港云服务器租用费用华为云活动:ate

Linux下生成可执行程序的每一步过程以及链接库的初步认识

程序的翻译程序在形成可执行程序之前都经历过一系列十分复杂的过程,也就是我们程序的翻译,程序的翻译经过以下阶段:预处理(进行宏替换)编译(生成汇编)汇编(生成机器可识别代码)连接(生成可执行文件或库文件)就以C语言代码为例,当我们写好了一份C语言代码,第一部要进行头文件的包含,然后在主函数下咔咔一顿写,再开始翻译,也就是

esh的snapshot快照备份

1)Elasticsearch的snapshot快照备份优点:通过snapshot拍摄快照,然后定义快照备份策略,能够实现快照自动化存储,可以定义各种策略来满足自己不同的备份缺点:还原不够灵活,拍摄快照进行备份很快,但是还原的时候没办法随意进行还原,类似虚拟机快照1、配置备份目录在elasticsearch.yml的配

Prometheus+Grafana可视化监控【MySQL状态】

文章目录一、安装Docker二、安装MySQL数据库(Docker容器方式)三、安装Prometheus四、安装Grafana五、Pronetheus和Grafana相关联六、安装mysqld_exporter七、Grafana添加MySQL监控模板一、安装Docker注意:我这里使用之前写好脚本进行安装Docker,

rsyslog-日志管理 logrotate-日志轮转

日志的管理的方式,以及怎么自己写一个管理日志的小脚本,其实也不能算脚本管理日志的进程rsyslogd:绝大部分日志记录,和系统操作有关,安全,认证sshd,su,计划任务at,cron…httpd/nginx/mysql:可以自己的方式记录日志psaux|greprsyslogd|grep-vgrep#最后这个管道后面

pytorch学习1

前言王者之争核心之争在于动态图优先还是静态图优先pytorch是动态计算生成新变量tf是先定义变量,再生成回归问题1、梯度下降算法了解[梯度算法是深度学习的核心,deeplearning求解复杂问题主要靠的是梯度下降算法,故deeplearning近似等于gradientprograming.]类似于高中所学的求导问题

Python 文件介绍和正则表达式

文章目录Python文件和正则表达式文件打开文件读取文件直接读取read():逐行读取采用**for**循环:采用readlines():正则表达式匹配规则re模块match方法:search方法group方法split方法编译:compile方法Python文件和正则表达式文件打开文件open函数用来打开文件,常用模

5个小功能掌握正则表达式的使用

点击下方关注我,然后右上角点击...“设为星标”,就能第一时间收到更新推送啦~~~这篇文章通过实现5个小功能,来讲述在Java中如何使用正则。Java中如何使用正则Java中正则相关类位于java.util.regex包下,主要使用2个类,如下:Pattern类:Pattern是正则表达式regex的编译表示形式Mat

手机上免费更改地址大全

大家好!今天我要分享一篇关于在手机上如何更改地址的文章。在互联网时代,地址是我们在网络世界中的身份标识,而更改地址可以为我们带来诸多便利。掌接下来,就让我们一起来了解手机上如何更改地址的全面指南吧!1.使用虚拟专用网络(虚拟私人网络)虚拟专用网络是一个常用并且有效的方法,可以帮助您更改手机上的地址。通过连接到虚拟专用网

xss渗透(跨站脚本攻击)

一、什么是XSS?XSS全称是CrossSiteScripting即跨站脚本,当目标网站目标用户浏览器渲染HTML文档的过程中,出现了不被预期的脚本指令并执行时,XSS就发生了。这里我们主要注意四点:1、目标网站目标用户;2、浏览器;3、不被预期;4、脚本。二、XSS有什么危害?当我们知道了什么是XSS后,也一定很想知

【Linux基础命令】nmtui命令使用实战

前言linux常用命令专栏已进入尾声,大约90个命令是日常工作中常用的,在拓展一些不常用的,也就100左右。是不是总结下来后,就感觉要学的内容没有那么多了。当然有些专属的基础命令不在本专栏内,比如LVM管理命令,RAID管理命令。后面还会继续添加一些shell中常用的命令。文章目录前言一.nmcui的介绍二.语法格式及

热文推荐