Linux基础之Shell与变量
一、提出问题
在平时的工作中,我们经常会碰到设置环境的问题,例如将应用的执行路径添加到PATH中,方便程序的执行;在Linux中更多的时候是跟shell打交道,很多通过shell启动的应用或者服务都需要设置环境变量,例如启动es需要设置一些环境变量,那么Shell到底是什么?Shell又跟环境变量有什么关系?
二、什么是Shell
我们知道计算机的CPU只能执行二进制表示的机器语言,在计算的早期,只有极少数的人才可以使用二进制语言来操纵计算机,这对我们所有人来说都是很难阅读和编写的,极大的提高了计算机的使用门槛。后来发展出来了操作系统,并在操作系统中提供了一个称为Shell的特殊程序,Shell接收用户输入的的英语指令,并将它将传递给操作系统的内核进行执行。从开发语言的角度上来说,shell脚本是一种面向计算机用户的脚本语言,而Shell程序就是这种脚本语言的解释器。Shell不是系统内核的一部分,但是使用系统内核执行程序,创建文件等。
shell、普通应用程序及操作系统内核的关系如下图

三、什么是变量
跟其他的高级开发语言一样,Shell里边的数据也需要保存在变量中。像任何程序一样,Shell使用变量来控制其行为,并且可以通过更改其值来更改Shell和其他程序的行为。
同样变量也有自己的命名规则
- 变量名称区分大小写。按照约定,环境变量应具有大写名称。
- 当给变量赋多个值时,它们必须用冒号分隔:。
- 等号周围没有空格=。
变量可以分为两大类,环境变量和外壳变量。
环境变量是在整个系统范围内可用的变量,并由所有衍生的子进程和外壳程序继承。
Shell变量是仅适用于当前Shell实例的变量。
四、变量的各种操作
- 查看环境变量
使用printenv来查看环境变量的值,如果不写变量名字,则显示出所有的环境变量
mango@mango:~$ printenv HOME
/home/mango
mango@mango:~$ printenv
SHELL=/bin/bash
SESSION_MANAGER=local/mango:@/tmp/.ICE-unix/1441,unix/mango:/tmp/.ICE-unix/1441
QT_ACCESSIBILITY=1
COLORTERM=truecolor
XDG_CONFIG_DIRS=/etc/xdg/xdg-ubuntu:/etc/xdg
XDG_MENU_PREFIX=gnome-
GNOME_DESKTOP_SESSION_ID=this-is-deprecated
GTK_IM_MODULE=fcitx
LANGUAGE=en_US:en
QT4_IM_MODULE=fcitx
LC_ADDRESS=zh_CN.UTF-8
GNOME_SHELL_SESSION_MODE=ubuntu
LC_NAME=zh_CN.UTF-8
SSH_AUTH_SOCK=/run/user/1000/keyring/ssh
XMODIFIERS=@im=fcitx
DESKTOP_SESSION=ubuntu
可以同时打印多个变量
mango@mango:~$ printenv USER PWD
mango
/home/mango
也可以使用echo打印变量的值,但是需要在变量前边加上$
mango@mango:~$ echo $USER
mango
mango@mango:~$ echo $USER $PWD
mango /home/mango
- 搜索特定变量
可以使用grep命令查找包含某个字符串的所有变量
mango@mango:~$ printenv | grep USER
USERNAME=mango
USER=mango
还有一个set命令,除了可以打印环境变量,同时也包括Shell变量和Shell函数
mango@mango:~$ set | grep USER
USER=mango
USERNAME=mango
local -a dirs=(${BASH_COMPLETION_USER_DIR:-${XDG_DATA_HOME:-$HOME/.local/share}/bash-completion}/completions);
- 定义变量
使用命令行设置变量的最简单方法是键入其名称并直接赋值
mango@mango:~$ shellVar=hello
mango@mango:~$ echo $shellVar
hello
这样定义的是Shell变量,可以使用set查看,但是无法使用printenv查看
mango@mango:~$ printenv shellVar
mango@mango:~$ set | grep shellVar
shellVar=hello
启动子shell无法打印变量的值
mango@mango:~$ echo $shellVal
hello
mango@mango:~$ bash
mango@mango:~$ echo $shellVal
mango@mango:~$
- 导出Shell变量
我们可以使用export来导出Shell变量,将其提升为环境变量,这是就可以使用printenv及在子shell里打印
mango@mango:~$ export shellVal
mango@mango:~$ printenv shellVal
hello
mango@mango:~$ bash
mango@mango:~$ printenv shellVal
hello
- 固化环境变量
直接使用export导出的环境变量,只是保存在当前回话的内存中,所以关闭Shell后就会丢失;我们需要将环境变量添加到配置文件中。
如果只为当前用户设置,需要编辑.bashrc文件
sudo nano ~/.bashrc
在文件末尾添加下边的语句
export shellVal=hello
保存并退出,重新启动外壳程序后,将应用更改。如果要在当前会话应用更改,需要使用source命令
source ~/.bashrc
如果要为所有用户设置环境变量,需要在/etc/profile.d文件夹中创建一个变量文件
mango@mango:~$ sudo touch /etc/profile.d/mango_env.sh
mango@mango:~$ sudo chmod +x /etc/profile.d/mango_env.sh
mango@mango:~$ sudo nano /etc/profile.d/mango_env.sh
在文件末尾添加下边的语句
export shellVal=hello
保存并退出,重新启动外壳程序后,将应用更改。如果要在当前会话应用更改,需要使用source命令
source /etc/profile.d/mango_env.sh
Linux基础之Shell与变量的更多相关文章
- Linux基础之-shell script(变量,运算符,流程控制,函数)
一.shell script Shell 脚本(shell script),是一种为shell编写的脚本程序.业界所说的shell通常都是指shell脚本,但读者朋友要知道,shell和shell s ...
- linux基础之Shell Script入门介绍
本文介绍下,学习shell script编程的入门知识,通过几个入门实例,带领大家走进shell script的神圣殿堂,呵呵,有需要的朋友参考下. 本文转自:http://www.jbxue.com ...
- Linux基础篇–shell脚本编程基础
本章内容概要 编程基础 脚本基本格式 变量 运算 条件测试 配置用户环境 7.1 编程基础程序:指令+数据程序编程风格: 过程式:以指令为中心,数据服务于指令 对象式:以数据为中心 ...
- 【Linux】之shell特殊变量整理
目录 1. 特殊变量列表 2. 特殊说明 在shell中变量名只能包含数字.字母和下划线,因为某些包含其他字符的变量有特殊含义,这样的变量被称为特殊变量. 例如,$ 表示当前Shell进程的ID,即p ...
- linux基础6-bash shell编程
1. type [-ta] name 一般情况下,type命令被用于判断另外一个命令是否是内置命令,但是它实际上有更多的用法. 1.1.判断一个名字当前是否是alias.keyword.functio ...
- Linux基础(五) Shell函数
Shell 函数 linux shell 可以用户定义函数,然后在shell脚本中可以随便调用. shell中函数的定义格式如下: [ function ] funname [()] { action ...
- 【原创】Linux基础之Shell脚本常用命令
#!/bin/sh 1 取脚本参数 $# 参数个数$0 当前脚本名$1 第1个参数$n 第n个参数$* 所有参数$@ 所有参数$? 上个命令的状态$$ 当前pid 2 日期 $ dateWed Mar ...
- Linux基础(三)Shell test 命令
Shell test 命令 Shell中的 test 命令用于检查某个条件是否成立,它可以进行数值.字符和文件三个方面的测试. 数值测试 参数 说明 -eq 等于则为真 -ne 不等于则为真 -gt ...
- Linux 基础知识----shell
1.file title: #!/bin/bash 2.input: echo $1 echo $2 3.if # ifif [ "$1" = "N" ]the ...
随机推荐
- cache-control config & http cache storage location control
cache-control config & http cache storage location control cache-control 设置 where is the storage ...
- Swift in Action
Swift in Action Swift Playgrounds https://apps.apple.com/us/app/swift-playgrounds/id1496833156?mt=12 ...
- React & Didact
React & Didact A DIY guide to build your own React https://github.com/pomber/didact https://gith ...
- DevOps tools
DevOps tools mozart & ansible https://www.ansible.com/integrations/devops-tools websocket jenken ...
- yapi & mock JSON
yapi & mock JSON json, body https://hellosean1025.github.io/yapi/documents/mock.html response bo ...
- C++算法代码——纪念品分组[NOIP2007 普及组]
题目来自:http://218.5.5.242:9018/JudgeOnline/problem.php?id=1099 https://www.luogu.com.cn/problem/P1094 ...
- 关于Python 编码的一点认识
在计算机中,所有数据的存储.运算以及传输都必须是二进制数字,因为计算机只认识0和1. 当一个人把一份数据传给另一个人时,计算机传递的是其实是二进制数字,但这些数字需要被还原为原始信息. 这个工作当然是 ...
- HttpDns 原理是什么
本文转载自HttpDns 原理是什么 什么是 DNS DNS(Domain Name System,域名系统),DNS 服务用于在网络请求时,将域名转为 IP 地址.能够使用户更方便的访问互联网,而不 ...
- 水墨屏开发设备,旧 Kindle 改造而成
原文地址:Turning an old Amazon Kindle into a eink development platform 原文作者:adq 译者 & 校正:HelloGitHub- ...
- 【经验】Rufus制作Win10启动盘支持UEFI:比使用UltraISO(软碟通)制作Win10操作系统U盘启动盘更快捷的工具完整教程-
ultraiso中文称之为软碟通,是一款功能强大的光盘映像文件制作/编辑/转换工具,通过它,用户可以直接编辑ISO文件和从ISO中提取文件和目录,也可以从CD-ROM制作光盘映像或者将硬盘上的文件制作 ...