首页 > 系统相关 >Shell变量_环境变量设置

Shell变量_环境变量设置

时间:2023-10-09 17:48:05浏览次数:32  
标签:profile Shell mrxu 变量 root 环境变量 localhost name

环境变量设置

环境变量一般指的是用export内置命令导出的变量,用于定义shell的运行环境,保证shell命令的正确执行。

shell通过环境变量确定登录的用户名、PATH路径、文件系统等各种应用。

环境变量可以在命令行中临时创建,但是用户退出shell终端,变量即丢失,如要永久生效,需要修改环境变量的配置文件

  • 用户个人配置文件 /.bash_profile、/.bashrc 远程登录用户特有文件
  • 全局配置文件 /etc/profile、 /etc/bashrc、且系统建议最好建在 /etc/profile.d/,而非直接修改主文件,修改全局配置文件,影响所有登录系统的用户
###修改个人的配置文件定义全局变量。
[mrxu@localhost myshell]$ cat ~/.bash_profile 
# .bash_profile

# Get the aliases and functions
if [ -f ~/.bashrc ]; then
	. ~/.bashrc
fi

# User specific environment and startup programs

PATH=$PATH:$HOME/.local/bin:$HOME/bin

export PATH
export name="徐先生"
[mrxu@localhost myshell]$ 
[mrxu@localhost myshell]$ echo $name

[mrxu@localhost myshell]$ source  ~/.bash_profile 
[mrxu@localhost myshell]$ echo $name
徐先生
[mrxu@localhost myshell]$ exit
exit
[root@localhost myshell]# echo ${name}
脚本变量
[root@localhost myshell]# 
####在测试的时候遇到问题;修改mrxu用户下的 ~/.bash_profile文件添加全局变量name;  当用root登录时 su mrxu命令切换后查询变量值为空,只有source后才能加载出来,后查询原因只有su - mrxu 才会开启login shell,会加载到该配置文件; su mrxu 则开启no login shell不会加载到该配置文件
[root@localhost ~]# echo $name 

[root@localhost ~]# su mrxu   ###使用的no login shell        
[mrxu@localhost root]$ echo $name

[mrxu@localhost root]$ exit
exit
[root@localhost ~]# su -mrxu  ##语法错误需要空格
用法:
 su [选项] [-] [USER [参数]...]
选项:
 -, -l, --login                  使 shell 成为登录 shell
[root@localhost ~]# su - mrxu
上一次登录:五 9月  1 10:45:07 CST 2023pts/0 上
[mrxu@localhost ~]$ echo $name
徐先生
[mrxu@localhost ~]$ exit
登出
[root@localhost ~]# 

注意:

Login Shell

Login Shell通常是我们通过终端登录、切换到另一个账号以及使用ssh进行登录时创建的Shell环境。其一般是一次用户主动的第一次会话当中。

当创建Login Shell时,会按照下面顺序依次执行以下逻辑。

  1. 登录进程先执行/etc/profile
  2. /etc/profile会执行/etc/profile.d/*
  3. 之后登录进程执行~/.bash_profile
  4. ~/.bash_profile会执行~/.bashrc
  5. ~/.bashrc会执行/etc/bashrc

Non Login Shell
Non Login Shell通常是在Login Shell中创建的子Shell,比如在进程中创建Shell, 或者在Shell当中使用bash等命令创建一个子Shell,Non Login Shell通常无需进行用户登录、权限认证等逻辑。 所以你可以大胆的假设没有进行用户认证的Shell都是Non Login Shell。

需要注意的是,不是所有的用户登录的Shell都是Login Shell,它也有可能是Non Login Shell。比如当你通过su命令切换账号时却没有加上-时,此时Linux创建的是Non Login Shell。 su - work # Login Shell
su work # Non Login Shell
当创建Non Login Shell时,会按照下面顺序依次执行以下逻辑。

非登录进程会执行~/.bashrc
~/.bashrc会执行/etc/bashrc
/etc/bashrc 会在Non-Login Shell模式里执行 /etc/profile.d/

注意2:

  1. 每个用户都有自己的环境配置文件,/.bash_profile、/.bashrc,且以个人配置文件,优先加载变量,读取,以个人的优先生效。
  2. 当需要给所有用户都使用某个变量时,写入/etc/profile即可
[root@localhost ~]# cat -n /etc/profile
     1	# /etc/profile
 #.................
    74	
    75	unset i
    76	unset -f pathmunge
    77	export name="徐先生管理员"
    78	
[root@localhost ~]# sh
sh-4.2# echo $name
徐先生管理员
sh-4.2# exit
exit
[root@localhost ~]# echo $name
徐先生管理员
[root@localhost ~]# su - mrxu  ###mrxu下`~/.bash_profile`文件已调整name=徐先生;
上一次登录:五 9月  1 14:27:50 CST 2023pts/0 上
[mrxu@localhost ~]$ echo $name
徐先生
[mrxu@localhost ~]$ exit
登出
[root@localhost ~]# su mrxu
[mrxu@localhost root]$ echo $name #开启no login shell 不加载~/.bash_profile`
徐先生管理员
[mrxu@localhost root]$ 

检查系统环境变量的命令
  • set 输出所有变量,包括全局变量,局部变量(脚本函数这类)
  • env 只显示全局变量
  • declare 输出所有的变量,如同set
  • export , 显示和设置环境变量值
root@localhost ~]# set |wc -l
2849
[root@localhost ~]# set |grep ^name
name=徐先生管理员
[root@localhost ~]# 
[root@localhost ~]# declare |wc -l
2850
[root@localhost ~]# set |wc -l
2850
[root@localhost ~]# 
[root@localhost ~]# env |wc -l
48
[root@localhost ~]# export |wc -l
48
[root@localhost ~]# 
撤销环境变量
  • unset 变量名,删除变量或函数
[root@localhost ~]# su - mrxu
上一次登录:五 9月  1 14:34:06 CST 2023pts/0 上
[mrxu@localhost ~]$ echo $name
徐先生
[mrxu@localhost ~]$ unset name
[mrxu@localhost ~]$ echo $name

[mrxu@localhost ~]$ exit
登出
[root@localhost ~]# su - mrxu
上一次登录:五 9月  1 15:21:47 CST 2023pts/0 上
[mrxu@localhost ~]$ echo $name
徐先生
[mrxu@localhost ~]$ 
设置只读变量
  • readonly ,只有shell结束,只读变量失效
[root@localhost ~]# readonly she="安娜"
[root@localhost ~]# she="tom"
bash: she: 只读变量
[root@localhost ~]# 
系统保留环境变量关键字

bash内嵌了诸多环境变量,用于定义bash的工作环境。awk

#过滤出,格式化所有的环境变量名字
[root@localhost tmp]# export |awk -F '[ := ]' '{print $3}'
##
COLORTERM
DBUS_SESSION_BUS_ADDRESS
DESKTOP_SESSION
DISPLAY
XDG_SEAT
XDG_SESSION_DESKTOP
XDG_SESSION_ID
XDG_SESSION_TYPE
XDG_VTNR
XMODIFIERS
name

环境变量文件加载顺序
  1. 登录Linux,系统启动一个bash shell;bash会取若干系统环境文件,检查变量设置
  2. /etc/profile:全局环境变量文件, 为系统的每个用户设置环境信息,当用户第一次登录时,该文件被执行,并从/etc/profile.d目录的配置文件中搜集shell的设置
  3. 然后读取/etc/profile.d目录下的脚本,有系统诸多脚本,也放入自定义需要登录加载的脚本,便于用于登录后立即运行脚本
  4. 运行 $HOME/.bah_profile (用户环境变量文件)
  5. 运行$Home/.bashrc

.....

最后运行/etc/bashrc

标签:profile,Shell,mrxu,变量,root,环境变量,localhost,name
From: https://www.cnblogs.com/xjianbing/p/17752326.html

相关文章

  • Shell变量_特殊变量
    特殊变量shell的特殊变量,用在如脚本,函数传递参数使用,有如下的特殊的,位置参数变量$0 获取shell脚本文件名,以及脚本路径$n获取shell脚本的第n个参数,n在1-9之间,如$1,$9,大于9则需要加大括号${10},参数空格隔开$#获取执行的shell脚本后面的参数总个数$*获取she......
  • Shell子串_变量子串的语法介绍
    变量子串的语法介绍name="Mrxujbing" #该变量的值,有索引是从0,1,2,3,4...${变量} 返回变量值${#name} 返回变量长度${变量:start} 返回变量start数值之后的字符串,且包含start的数字(start值就是索引值)${变量:start:length} 提取start之后的length限制的字符,例......
  • Java-JDK8的下载安装及环境变量配置
    JDK下载网址:JavaDownloads|Oracle(现在需要注册登陆后才可以下载JDK安装包)——有安装包最好!!!进入网址找到Java8==>选择windows视窗==>选择X64,(X64为64位系统,X86为32为系统)。一、下载JDK安装包。   1.双击打开安装包,选择“下一步”。2.选择要安装的目录和组......
  • 【2023年10月09日】STF61_LINUX_SHELL
     STF61_LINUX_SHELL(上午)1. 什么是shell?shell就是一个用C语言编写的程序,是用户使用linux的桥梁。shell既是一种命令语言,也是一种程序设计语言2. 什么是shellscript?利用shell的功能所写的一个“程序”,这个程序是使用纯文本文档,将一些shell的语法与命令写在命令。搭......
  • STF61_LINUX_SHELL(上午)
     STF61_LINUX_SHELL(上午)1. 什么是shell?shell就是一个用C语言编写的程序,是用户使用linux的桥梁。shell既是一种命令语言,也是一种程序设计语言2. 什么是shellscript?利用shell的功能所写的一个“程序”,这个程序是使用纯文本文档,将一些shell的语法与命令写在命令。搭......
  • shell脚本中的多行注释
     001、[root@pc1test01]#lsa.sh[root@pc1test01]#cata.sh##测试脚本#!/bin/bash:"##冒号和双引号之间有一个空格(也可以是单引号)xxxxxxxyyyyyyyyyyy##注释内容zzzzzzzz"((sum=8+9+......
  • arm32_shellcode
    arm32_shellcode题目文件build.sh#!/bin/basharm-linux-gnueabi-gcc-g-static-Iinclude-ochalchal.clibcapstone.achal.c#include<stdio.h>#include<string.h>#include<sys/mman.h>#include<stdlib.h>#include<ctype.h>#......
  • shell 实现harbor 指定仓库镜像tags 查询
    1.需求背景1.1容器发布ci成功以后我们希望CD时候可以选择相关镜像1.2统计指定仓库镜像有多少个版本2.shell代码#!/bin/bash#harbor关键环境变量HARBOR_URL=""USERNAME=""PASSWORD=""PAGE_SIZE=50imges_head=$(echo"$HARBOR_URL"|awk-F//'{print$2}')pr......
  • Python入门示例系列04 使用 IDLE Shell
    启动IDLEShell安装Python之后,点击开始菜单,找到P开头的菜单项,点开某个版本的Python,如下图:  点击IDLE    输入代码之后按回车Enter可以运行代码【上图,输入x=1+2,然后按回车,即开始执行】输入变量(对象)名可以查看值【上图,输入x,可以查看x的值】Alt+P上一条代码(st......
  • C#学习笔记--变量类型的转换
    变量类型的转化:转换原则同类型的大的可以装小的,小类型的装大的就需要强制转换。隐式转换:同种类型的转换://有符号long——>int——>short——>sbytelongl=1;inti=1;shorts=1;sbytesb=1;//隐式转换int隐式转换成了long//可以用大范围装小范围的类型(隐......