热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

LinuxShell变量初探:初始值解析与使用指南

本文探讨了LinuxShell中变量的基本概念及其在BASH中的应用。变量是用于存储可变数据的标识符,能够代表不同的值。文章详细介绍了BASHshell的主要优势,包括强大的命令编辑能力、自动补全功能、命令别名设置、作业控制以及前后台任务管理。此外,还涵盖了编程脚本编写和通配符的使用方法,为初学者提供了全面的指导。

BASH:主要的优点:

命令编修能力;

命令与文件补全功能;

命令别名设置功能;

工作控制、前景背景控制;

程序化脚本;

万用字符;

1、什么是变量?

1、 让某一个特定的字符串代表不固定的内容。

2、 变量就是让一组文字或符号等来取代一些设置,或者是一串保留的数据。

3、变量的格式:变量名=变量内容(变量名一般设置为大写字母,专业一些)。

设置变量的规则:

1、 变量与变量内容以一个等号“=”来链接;

2、 等号两边不能直接接空白字符;

3、 变量名称只能是英文字母与数字,但是开头字符不能是数字;

4、 变量内容若有空白字符可以使用双引号,或单引号讲变量内容结合起来。双引号内的特殊字符如$等,可以保有原本的特性;单引号内的特殊字符则仅作为一般字符(纯文本)。

5、 可用转义符“\”将特殊符号变成一般字符;

6、 在一串指令的执行中,还需要借由其他额外的指令所提供的信息时,可以使用反撇号,而不是单引号。

7、 若该变量需要在其他子程序执行,则需要一export来使自定义变量变成环境变量。

8、 通常大写字符为系统默认变量,自行设置变量可以使用小写字符,方便判断;

9、 取消变量的方法为使用unset: “unset 变量名称”例如取消myname的设置:unset myname。

有关shell变量定义、赋值及变量输出加单引号、双引号、反引号与不加引号的简要说明,如下表所示:

《linux shell中变量,初值是什么?,shell总结笔记——关于变量》

建议:

在脚本中定义普通字符串变量时,应尽量把变量的内容用双引号括起来;

单纯数字的变量内容可以不加引号;

希望变量的内容原样输出时需要加单引号;

希望变量值引用命令并获取命令的结果时就用反单引号或$( )。

env命令——查询环境变量。

random命令:随机产生的数字是在0——32768之间。

set命令:查询的是所有的变量,包括环境变量和自定义变量。

$:代表的是当前shell的PID号,如echo $$;

?:代表的是上一个指令的回传值,如echo $?

自定义变量与环境变量最大的区别是:该变量是否会被子程序(子shell)继续使用。

各种变量定义的作用域:

环境变量=全域变量

自定义变量=区域变量

关于系统中的环境变量解释:

《linux shell中变量,初值是什么?,shell总结笔记——关于变量》

PS1——系统特定变量名

其中PS1这个变量需要解释下,其他可以自行看懂,PS1可用的选项如下:

\d :可显示出“星期月日”的日期格式,如:”Mon Feb 2″

\H :完整的主机名称。举例来说,我的练习机为“study.centos.vbird”

\h :仅取主机名称在第一个小数点之前的名字,如我主机则为“study”后面省略

\t :显示时间,为 24 小时格式的“HH:MM:SS”

\T :显示时间,为 12 小时格式的“HH:MM:SS”

\A :显示时间,为 24 小时格式的“HH:MM”

\@ :显示时间,为 12 小时格式的“am/pm”样式

\u :目前使用者的帐号名称,如“dmtsai”;

\v :BASH 的版本信息,如我的测试主机版本为 4.2.46(1)-release,仅取“4.2”显示

\w :完整的工作目录名称,由根目录写起的目录名称。但主文件夹会以 ~ 取代;

\W :利用 basename 函数取得工作目录名称,所以仅会列出最后一个目录名。

# :下达的第几个指令。

\$ :提示字符,如果是 root 时,提示字符为 # ,否则就是 $

用法示例:

[root@localhost ~]# PS1='[\u@\h\w\A#\#]\$’ #添加上面的一些选项

[root@localhost~13:07#5]#cd /etc #多执行两下命令

[root@localhost/etc13:07#6]#cd /boot

[root@localhost/boot13:07#7]#exit

#可以发现,执行PS1这个变量并结合一些选项的使用,可以暂时改变命令提示符的变化,

#并且后面的数字会每执行一次,就增加一个数,这是\#的作用

设置变量的方式1

《linux shell中变量,初值是什么?,shell总结笔记——关于变量》

[root@localhost ~]# path=$PATH #先自定义一个变量,引用“PATH”的值,用“path”变量做测试

[root@localhost ~]# echo $path #输出进行确认下

/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin

[root@localhost ~]# echo ${path#/*local/sbin:} #试着删除一个

/usr/local/bin:/usr/sbin:/usr/bin:/root/bin

#在上面的命令中,“$”是关键字,用在这种删除模式所必须存在的;

#“path”就是原本的变量名称;

#“#”代表从变量内容的最前面开始向右删除,且只删除最短的那个;

#“/*local/sbin:”代表要被删除的部分,由于“#”代表从前面开始删除,

#所以这里就从“/”写起,并且可以使用“*”这个万用字符,可以代表任意内容。

#但这条命令并没有改变“path”变量的内容,可以将“echo”换为“path=”即可直接改变变量内容。

#如下:

[root@localhost ~]# path=${path#/*local/sbin:}

[root@localhost ~]# echo $path

/usr/local/bin:/usr/sbin:/usr/bin:/root/bin

#这就将原本的变量值更改成功了。

关于其他的更改方式,参考上面的表格即可咯!

(2)

《linux shell中变量,初值是什么?,shell总结笔记——关于变量》

示例1——测试一下是否存在username这个变量,若不存在则赋值username为root。

[root@localhost ~]# echo $username #查看username变量是否存在

[root@localhost ~]# username=${username-root} #如果变量内容不存在就赋值为root

[root@localhost ~]# echo $username #变量不存在,所以将它赋值了root

root

[root@localhost ~]# username=’lv jian zhao’ #那么现在给它赋值

[root@localhost ~]# username=${username-root} #再次使用这个,表示如果值不存在,则将它赋值为root

[root@localhost ~]# echo $username #再次输出,会发现还是我们手工赋的值,并没有给它赋值为root

lv jian zhao

#从上面可以看出“-”号的作用,就是如果值不存在,就给它赋值“-”号后面的值,若存在,则放弃。

示例2——若username未设置或为空字串,则将username内容设置为root

[root@localhost ~]# username=”” #将username设置为空字串

[root@localhost ~]# username=${username-root} #若值不存在,则赋值为root

[root@localhost ~]# echo $username

#输出该变量,会发现还是空的,因为username的值是存在的,只不过是空字串而已,所以并没有赋值为root

[root@localhost ~]# username=${username:-root} #使用“:-”试试

[root@localhost ~]# echo $username #会发现已经赋值为root了

root

#说明:“:-”的作用就是如果值为空或是未设置,都能被后面的内容替换。

设置变量的方式2

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

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

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

有一些环境变量,比如HOME、PATH、SHELL、UID、USER等,在用户登录之前就已经被/bin/login程序设置好了。通常环境变量被定义并保存在用户家目录下的.bash_profile文件或全局的配置文件/etc/profile中,具体的环境变量说明请参考下表:

《linux shell中变量,初值是什么?,shell总结笔记——关于变量》

在查看设置的变量时,有3个命令可以显示变量的值:set、env和declare(替代早期的typeset)。set命令输出所有的变量,包括全局变量和局部变量;env命令只显示全局变量;declare命令输出所有的变量、函数、整数和已经导出的变量。set-o命令显示bash Shell的所有参数配置信息。

查看举例:

[root@localhost ~]# env | tail #使用env命令进行查看全局变量

[root@localhost ~]# set -o #使用set -o查看bash shell的所有参数配置信息

设置环境变量的方式

如果想要设置环境变量,就要在给变量赋值之后或在设置变量时使用export命令,具体设置见下文的示例。其实,除了export命令,带-x选项的declare内置命令也可以完成同样的功能(注意:此处不要在变量名前面加$):

export命令和declare命令的格式如下:

①export 变量名=value②变量名=value ; export 变量名③declare -x 变量名=value

#以上就是三种设置环境变量的三种方法

上面设置的全局变量只是临时设置的,重启系统后,就失效了,那么可以将变量写入以下几个文件其中之一即可,使其永久生效:

1、只对用户的环境变量配置

[lv@localhost ~]$ ls ~/.bashrc ~/.bash_profile

#对于用户的环境变量设置,比较常见的是用户家目录下的这两个目录,推荐写入第一个文件“.bashrc”

2、全局环境变量的配置

常见的全局环境变量的配置文件如下:

/etc/profile

/etc/bashrc #推荐在此文件中优先设置

/etc/profile.d/

环境变量总结

环境变量的定义:

变量名通常要大写;

变量可以在自身的shell及子shell中使用;

常用export来定义环境变量;

数字内容的变量定义可以不加引号,其他没有特殊要求的字符串等定义最好都加上双引号;如果真的需要原样输出就加单引号;定义变量加双引号是最常见的使用场景;

如果需要获取命令结果赋值给变量,则可以使用反撇号“(tab键上面的那个按键)或者括号“()”将命令字括起来;

执行env默认可以显示所有的环境变量名称及对应的值;

输出时用“echo $变量名”,取消时用“unset 变量名”;

书写crond定时任务时要注意,脚本要用到环境变量最好现在所执行的shell脚本中重新定义;

如果希望环境变量永久生效,则可以将其放在用户环境变量文件或全局环境变量文件里;

环境变量初始化与对应文件的生效顺序:

在登录Linux系统并启动一个bash shell时,默认情况下bash会在若干个文件中查找环境变量的设置这些文件,这些文件可统称为系统环境文件。bash检查的环境变量文件的情况取决于系统运行shell的方式。系统运行shell的方式一般有3种:①通过系统用户登录后默认运行的shell;②非登录交互式运行shell;③执行脚本运行非交互式shell。

用户登录系统后首先会加载/etc/profile全局环境变量文件,这是Linux系统上默认的shell主环境变量文件,系统上每个用户登录都会加载这个文件。

当加载完/etc/profile文件后,才会执行/etc/profile.d目录下的脚本文件,这个目录下的脚本文件有很多,例如:系统的字符集设置(/etc/sysconfig/il8n)等。

之后开始运行$HOME/.bash_profile(用户环境变量文件),在这个文件中,又会去找$HOME/.bashrc(用户环境变量文件),如果有,则执行,如果没有,则不执行。在$HOME/.bashrc文件中又会去找/etc/bashrc(全局环境变量文件),如果有,则执行,如果没有,则不执行。

如果用户的shell不是登录时启动的(比如手动敲下bash时或者其他不需要输入密码的登录及远程连接情况),那么这种非登录shell只会加载$HOME/.bashrc,并会去找/etc/bashrc文件。因此如果希望在非登录shell下也可以督导设置的环境变量等内容,就需要将变量设定等写入$HOME/.bashrc或者/etc/bashrc,而不是$HOME/.bash_profile或/etc/profile。

———————— 本文至此结束,感谢阅读 ————————


推荐阅读
  • 系统管理员可以通过多种方法实时监控Linux系统中的用户活动,包括当前已登录的用户及其正在进行的操作。利用特定的命令和工具,管理员可以轻松获取这些信息,确保系统的安全性和稳定性。例如,使用`who`、`w`或`last`等命令可以快速查看当前登录的用户及其活动详情。 ... [详细]
  • 技术日志:Ansible的安装及模块管理详解 ... [详细]
  • 1. 设置用户密码:使用 `slappasswd` 工具生成加密密码,确保账户安全。具体步骤如下:输入命令 `slappasswd -s NewPassword`,系统将提示重新输入新密码,并生成加密后的哈希值 {SSHA}xxxxxxxxxxxxxxxxx。2. 编写配置文件:编辑 `vildapus` 配置文件,添加必要的用户账户信息,以确保新用户能够顺利登录系统。 ... [详细]
  • 在搭建Hadoop集群以处理大规模数据存储和频繁读取需求的过程中,经常会遇到各种配置难题。本文总结了作者在实际部署中遇到的典型问题,并提供了详细的解决方案,帮助读者避免常见的配置陷阱。通过这些经验分享,希望读者能够更加顺利地完成Hadoop集群的搭建和配置。 ... [详细]
  • ROS主机与从机之间的通信原理及机制分析
    本文深入探讨了ROS(Robot Operating System)主机与从机之间的通信原理及机制。通过分析ROS网络架构,详细阐述了节点间的通信方式、消息传递流程以及数据同步机制。此外,还介绍了ROS中常用的通信模式,如发布/订阅、服务调用和参数服务器,为开发者提供了全面的技术指导。 ... [详细]
  • 在项目开发过程中,掌握一些关键的Linux命令至关重要。例如,使用 `Ctrl+C` 可以立即终止当前正在执行的命令;通过 `ps -ef | grep ias` 可以查看特定服务的进程信息,包括进程ID(PID)和JVM参数(如内存分配和远程连接端口);而 `netstat -apn | more` 则用于显示网络连接状态,帮助开发者监控和调试网络服务。这些命令不仅提高了开发效率,还能有效解决运行时的各种问题。 ... [详细]
  • 在Linux系统中,为了提高安全性,可以通过设置命令执行超时和用户超时注销来防止因用户长时间未操作而带来的安全隐患。具体而言,可以通过编辑 `/etc/profile` 文件,添加或修改相关参数,确保用户在指定时间内无操作后自动注销。此外,还可以利用 `timeout` 命令来限制特定命令的执行时间,进一步增强系统的稳定性和安全性。 ... [详细]
  • 在生产环境中进行高效部署与优化 ... [详细]
  • 在 Linux 系统中,`/proc` 目录实现了一种特殊的文件系统,称为 proc 文件系统。与传统的文件系统不同,proc 文件系统主要用于提供内核和进程信息的动态视图,通过文件和目录的形式呈现。这些信息包括系统状态、进程细节以及各种内核参数,为系统管理员和开发者提供了强大的诊断和调试工具。此外,proc 文件系统还支持实时读取和修改某些内核参数,增强了系统的灵活性和可配置性。 ... [详细]
  • PyQt5 QTextEdit:深入解析Python中多功能GUI库的应用与实现
    本文详细探讨了 PyQt5 中 QTextEdit 组件在 Python 多功能 GUI 库中的应用与实现。PyQt5 是 Qt 框架的 Python 绑定,提供了超过 620 个类和 6000 个函数及方法,广泛应用于跨平台应用程序开发。QTextEdit 作为其中的重要组件,支持丰富的文本编辑功能,如富文本格式、文本高亮和自定义样式等。PyQt5 的流行性不仅在于其强大的功能,还在于其易用性和灵活性,使其成为开发复杂用户界面的理想选择。 ... [详细]
  • RancherOS 是由 Rancher Labs 开发的一款专为 Docker 设计的轻量级 Linux 发行版,提供了一个全面的 Docker 运行环境。其引导镜像仅 20MB,非常适合在资源受限的环境中部署。本文将详细介绍如何在 ESXi 虚拟化平台上安装和配置 RancherOS,帮助用户快速搭建高效、稳定的容器化应用环境。 ... [详细]
  • Windows环境下详细教程:如何搭建Git服务
    Windows环境下详细教程:如何搭建Git服务 ... [详细]
  • TCP三次握手过程详解与图示解析
    本文详细解析了TCP三次握手的过程,并通过图示清晰展示了各个状态的变化。同时,文章还介绍了四次挥手的图解,解释了在TIME_WAIT状态中,客户端最后一次发送的ACK包的作用和重要性。 ... [详细]
  • 本题库精选了Java核心知识点的练习题,旨在帮助学习者巩固和检验对Java理论基础的掌握。其中,选择题部分涵盖了访问控制权限等关键概念,例如,Java语言中仅允许子类或同一包内的类访问的访问权限为protected。此外,题库还包括其他重要知识点,如异常处理、多线程、集合框架等,全面覆盖Java编程的核心内容。 ... [详细]
  • Cookie是一种小型数据文件,由Web服务器生成并存储在用户的浏览器中。当用户再次访问同一服务器时,这些数据可以被重新读取,为用户提供个性化的体验。Cookie在软件测试中具有重要作用,能够帮助测试人员验证会话管理、用户偏好设置等功能的正确性和安全性。通过深入解析Cookie的工作原理及其在不同场景下的应用,本文旨在为软件测试人员提供全面的技术指导。 ... [详细]
author-avatar
想丶风吹叶落
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有