Linux Shell 脚本专题

news/2024/10/3 12:28:24

V1.0 2024年5月8日 发布于博客园

目录
  • 常用环境变量
    • 一、环境变量的概念
      • 1、环境变量的含义
      • 2、环境变量的分类
      • 3、Linux环境变量
    • 二、常用的环境变量
      • 1、查看环境变量
      • 2、常用的环境变量
    • 三、设置环境量
      • 1、系统环境变量
      • 2、用户环境变量
      • 3、环境变量脚本文件的执行顺序
    • 四、重要环境变量的详解
      • 1、PATH环境变量
      • 2、LANG环境变量
      • 3、LD_LIBRARY_PATH环境变量
      • 4、CLASSPATH
    • 五、环境变量的生效
    • 六、应用经验
  • 部分常用命令详解
    • 脚本基本知识
      • 脚本固定格式 :
        • 脚本注释
    • Shell 的变量功能
      • 变量的使用与设置
        • echo 变量的取用
        • 变量设定规则
      • 环境变量的功能
        • env 观察环境变量与常见环境变量说明
        • export 自定义变量转成环境变量
  • 参考文献

常用环境变量

一、环境变量的概念

1、环境变量的含义

程序(操作系统命令和应用程序)的执行都需要运行环境,这个环境是由多个环境变量组成的。

2、环境变量的分类

1)按生效的范围分类。

系统环境变量:公共的,对全部的用户都生效。

用户环境变量:用户私有的、自定义的个性化设置,只对该用户生效。

2)按生存周期分类。

永久环境变量:在环境变量脚本文件中配置,用户每次登录时会自动执行这些脚本,相当于永久生效。

临时环境变量:使用时在Shell中临时定义,退出Shell后失效。

3、Linux环境变量

Linux环境变量也称之为Shell环境量变量,以下划线和字母打头,由下划线、字母(区分大小写)和数字组成,习惯上使用大写字母,例如PATH、HOSTNAME、LANG等。

二、常用的环境变量

1、查看环境变量

1)env命令

在Shell下,用env命令查看当前用户全部的环境变量。

yuyi@IoTDevelopment:~/MyDevelopmentFile$ env
SHELL=/bin/bash
COLORTERM=truecolor
TERM_PROGRAM_VERSION=1.89.0
LC_ADDRESS=zh_CN.UTF-8
LC_NAME=zh_CN.UTF-8
LC_MONETARY=zh_CN.UTF-8
PWD=/home/yuyi/MyDevelopmentFile
LOGNAME=yuyi
XDG_SESSION_TYPE=tty
MANPATH=/usr/share/man:
MOTD_SHOWN=pam
HOME=/home/yuyi
LC_PAPER=zh_CN.UTF-8
LANG=en_US.UTF-8

上图只截取了部分环境变量,并非全部。

用env命令的时候,满屏显示了很多环境变量,不方便查看,可以用grep筛选。

env|grep 环境变量名

例如查看环境变量名中包含PATH的环境变量。

env|grep PATH
yuyi@IoTDevelopment:~/MyDevelopmentFile$ env|grep PATH
MANPATH=/usr/share/man:
PATH=/DevelopmentTool/usr/local/arm/5.4.0/usr/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin

2)echo命令

echo $环境变量名
yuyi@IoTDevelopment:~/MyDevelopmentFile$ echo ${LANG}
en_US.UTF-8
yuyi@IoTDevelopment:~/MyDevelopmentFile$ echo ${PATH}
/DevelopmentTool/usr/local/arm/5.4.0/usr/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin

注意,符号$不能缺少,这是语法规定。

2、常用的环境变量

1)PATH

可执行程序的搜索目录,可执行程序包括Linux系统命令和用户的应用程序,PATH变量的具体用法本文后面的章节中有详细的介绍。

yuyi@IoTDevelopment:~/MyDevelopmentFile$ echo ${PATH}
/DevelopmentTool/usr/local/arm/5.4.0/usr/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin

2)LANG

Linux系统的语言、地区、字符集,LANG变量的具体用法本文后面的章节中有详细的介绍。

yuyi@IoTDevelopment:~/MyDevelopmentFile$ echo ${LANG}
en_US.UTF-8

3)HOSTNAME

服务器的主机名。

yuyi@IoTDevelopment:~/MyDevelopmentFile$ echo ${HOSTNAME}
IoTDevelopment

4)SHELL

用户当前使用的Shell解析器。

yuyi@IoTDevelopment:~/MyDevelopmentFile$ echo ${SHELL}
/bin/bash

5)HISTSIZE

保存历史命令的数目。

yuyi@IoTDevelopment:~/MyDevelopmentFile$ echo ${HISTSIZE}
1000

6)USER

当前登录用户的用户名。

yuyi@IoTDevelopment:~/MyDevelopmentFile$ echo ${USER}
yuyi

7)HOME

当前登录用户的主目录。

yuyi@IoTDevelopment:~/MyDevelopmentFile$ echo ${HOME}
/home/yuyi

8)PWD

当前工作目录。

yuyi@IoTDevelopment:~/MyDevelopmentFile$ echo ${PWD}
/home/yuyi/MyDevelopmentFile
yuyi@IoTDevelopment:~/MyDevelopmentFile$ pwd
/home/yuyi/MyDevelopmentFile

9)LD_LIBRARY_PATH

C/C++语言动态链接库文件搜索的目录,它不是Linux缺省的环境变量,但对C/C++程序员来说非常重要,具体用法本文后面的章节中有详细的介绍。

10)CLASSPATH

JAVA语言库文件搜索的目录,它也不是Linux缺省的环境变量,但对JAVA程序员来说非常重要,具体用法本文后面的章节中有详细的介绍。

三、设置环境量

变量名='值'
export 变量名

export 变量名='值'

如果环境变量的值没有空格等特殊符号,可以不用单引号包含。

示例:

export ORACLE_HOME=/oracle/home
export ORACLE_BASE=/oracle/base
export ORACLE_SID=snorcl11g
export NLS_LANG='Simplified Chinese_China.ZHS16GBK'export PATH=$PATH:$HOME/bin:$ORACLE_HOME/bin:.export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$ORACLE_HOME/lib:.

采用export设置的环境变量,在退出Shell后就会失效,下次登录时需要重新设置。如果希望环境变量永久生效,需要在登录脚本文件中配置。

1、系统环境变量

系统环境变量对全部的用户生效,设置系统环境变量有三种方法。

1)在/etc/profile文件中设置。

用户登录时执行/etc/profile文件中设置系统的环境变量。但是,Linux不建议在/etc/profile文件中设置系统环境变量。

image

每个使用者登入取得bash 时一定会读取的配置文件! 所以如果你想要帮所有使用者设定整体环境,那就是改这里啰!

2)在/etc/profile.d目录中增加环境变量脚本文件,这是Linux推荐的方法。

/etc/profile在每次启动时会执行/etc/profile.d下全部的脚本文件。/etc/profile.d比/etc/profile好维护,不想要什么变量直接删除/etc/profile.d下对应的 shell 脚本即可。

/etc/profile.d目录下有很多脚本文件,例如:

root@IoTDevelopment:~# ls /etc/profile.d
01-locale-fix.sh  bash_completion.sh     debuginfod.csh  gnome-session_gnomerc.sh  vte-2.91.sh  xdg_dirs_desktop_session.sh
apps-bin-path.sh  cedilla-portuguese.sh  debuginfod.sh   im-config_wayland.sh      vte.csh

image

在以上示例中,/etc/profile.d目录中的oracle.sh是Oracle数据库的环境变量配置文件,内容如下:

image

其实这是个目录内的众多文件!只要在/etc/profile.d/ 这个目录内且扩展名为.sh ,另外,使用者能够具有r 的权限, 那么该文件就会被/etc/profile 呼叫进来。在CentOS 7.x 中,这个目录底下的文件规范了bash 操作接口的颜色、语系、ll 与ls 指令的命令别名、vi 的命令别名、which的命令别名等等。如果你需要帮所有使用者设定一些共享的命令别名时, 可以在这个目录底下自行建立扩展名为.sh 的文件,并将所需要的数据写入即可喔!

3)在/etc/bashrc文件中设置环境变量

该文件配置的环境变量将会影响全部用户使用的bash shell。但是,Linux也不建议在/etc/bashrc文件中设置系统环境变量。

2、用户环境变量

用户环境变量只对当前用户生效,设置用户环境变量也有多种方法。

在用户的主目录,有几个特别的文件,用ls是看不见的,用 ls .bash_* 可以看见。

yuyi@IoTDevelopment:~/MyDevelopmentFile$ ls ~/.bash*
/home/yuyi/.bash_history  /home/yuyi/.bash_logout  /home/yuyi/.bashrc

1).bash_profile(推荐首选)

当用户登录时执行,每个用户都可以使用该文件来配置专属于自己的环境变量。

2).bashrc

当用户登录时以及每次打开新的Shell时该文件都将被读取,不推荐在里面配置用户专用的环境变量,因为每开一个Shell,该文件都会被读取一次,效率肯定受影响。

3).bash_logout

当每次退出系统(退出bash shell)时执行该文件。

4).bash_history

保存了当前用户使用过的历史命令。

cat ~/.bash_history

3、环境变量脚本文件的执行顺序

环境变量脚本文件的执行顺序如下:

/etc/profile->/etc/profile.d->/etc/bashrc->用户的.bash_profile->用户的.bashrc

同名的环境变量,如果在多个脚本中有配置,以最后执行的脚本中的配置为准(例如,上代码段中所有的脚本都有某环境变量,则以用户的.bashrc为准)。

还有一个问题需要注意,在/etc/profile中执行了/etc/profile.d的脚本,代码如下:

for i in /etc/profile.d/*.sh ; doif [ -r "$i" ]; thenif [ "${-#*i}" != "$-" ]; then. "$i"else. "$i" >/dev/nullfifi
done

所以,/etc/profile.d和/etc/profile的执行顺序还要看代码怎么写 。

msedge_1F7rz3aJYn

若在该代码段前,则被该代码段覆盖,若在该代码段后,则覆盖该代码段的行为。

四、重要环境变量的详解

1、PATH环境变量

可执行程序的搜索目录,可执行程序包括Linux系统命令和用户的应用程序。如果可执行程序的目录不在PATH指定的目录中,执行时需要指定目录。

1)PATH环境变量存放的是目录列表,目录之间用冒号:分隔,最后的圆点.表示当前目录。

. 也是一个命令,是用于表示当前目录,故而./a.out 可以被执行

export PATH=目录1:目录2:目录3:......目录n:.

2)PATH缺省包含了Linux系统命令所在的目录(/usr/local/bin:/usr/bin:/usr/local/sbin:/usr/sbin),如果不包含这些目录,Linux的常用命令也无法执行(要输入绝对路径才能执行)。

示例:

image

3)在用户的.bash_profile文件中,会对PATH进行扩充,如下:

export PATH=$PATH:$HOME/bin
# 这里的$PATH表示之前已经存在的,故而表示在之前的PATH后继续添加用户家目录下的bin。但单次有效。

4)如果PATH变量中没有包含圆点.,执行当前目录下的程序需要加./或使用绝对路径。

示例:

image

2、LANG环境变量

LANG环境变量存放的是Linux系统的语言、地区、字符集,它不需要系统管理员手工设置,/etc/profile会调用/etc/profile.d/lang.sh脚本完成对PATH的设置。

CentOS6.x 字符集配置文件在/etc/syscconfig/i18n文件中。

CentOS7.x 字符集配置文件在/etc/locale.conf文件中,内容如下:

image

3、LD_LIBRARY_PATH环境变量

C/C++语言动态链接库文件搜索的目录,它不是Linux缺省的环境变量,但对C/C++程序员来说非常重要。

LD_LIBRARY_PATH环境变量存放的也是目录列表,目录之间用冒号:分隔,最后的圆点.表示当前目录,与PATH的格式相同。

export LD_LIBRARY_PATH=目录1:目录2:目录3:......目录n:.

4、CLASSPATH

JAVA语言库文件搜索的目录,它也不是Linux缺省的环境变量,但对JAVA程序员来说非常重要。

CLASSPATH环境变量存放的也是目录列表,目录之间用冒号:分隔,最后的圆点.表示当前目录,与PATH的格式相同。

五、环境变量的生效

1)在Shell下,用export设置的环境变量对当前Shell立即生效,Shell退出后失效。

2)在脚本文件中设置的环境变量不会立即生效,退出Shell后重新登录时才生效,或者用source命令让它立即生效,例如:

source /etc/profile

六、应用经验

虽然设置环境变量的方法有多种,但是建议系统环境变量建议在/etc/profile.d目录中配置,用户环境变量在用户的.bash_profile中配置,不建议在其它脚本文件中配置环境变,会增加运维的麻烦,容易出错。

部分常用命令详解

脚本基本知识

脚本固定格式 :

xxx.sh 创建好一个空白的脚本文件后,需要在脚本文件的第一行使用#!来指定shell解释器. 缺省默认使用bash解释器

#!/bin/bash

脚本注释

#这是注释

Shell 的变量功能

变量的使用与设置

echo 变量的取用

echo ${PATH} # 或 echo $PATH

变量设定规则

myname=VBird # 将myname这个变量名称设定是VBird ,
echo ${myname} # 打印变量内容
  1. 变量默认字符类型, 默认内容是空
  2. 等号两边不能直接接空格符
  3. 开头字符不能是数字
  4. 变量内容有空格必须用 " "或' '
    1. 双引号内的特殊字符如 $ 等,可以保有原本的特性 var="lang is $LANG"echo $var可得lang is zh_TW.UTF-8
    2. 单引号内的特殊字符则仅为一般字符 (纯文本)
  5. 若该变量为扩增变量内容时,则可用 "$变量名称" 或 ${变量} 累加内容 PATH="$PATH":/home/binPATH=${PATH}:/home/bin, 将/home/bin累加, 目录之间用冒号:分隔
  6. 通常大写字符为系统默认变量,自行设定变量可以使用小写字符
  7. 若该变量需要在其他子程序执行,则需要以 export 来使变量变成环境变量:export PATH

环境变量的功能

env 观察环境变量与常见环境变量说明

env 是environment (环境) 的简写.

env #列出目前的 shell 环境下的所有环境变量与其内容

export 自定义变量转成环境变量

export 变量名称

当你登入 Linux 并取得一个bash 之后,你的bash 就是一个独立的程序,这个程序的识别使用的是一个称为程序标识符,被称为PID 的就是。接下来你在这个 bash 底下所下达的任何指令都是由这个bash 所衍生出来的,那些被下达的指令就被称为子程序了。分享自己的变量设定给后来呼叫的文件或其他程序。

/etc/environment 用于定义全系统范围内必须的环境变量。
/etc/profile 通常用于执行更复杂的初始化命令和环境设置,并且是特定于 shell 登录会话的。
修改 /etc/environment 后通常需要重新登录或重启系统,而 /etc/profile 对于新的登录会话立即生效。
/etc/profile 可以用于执行配置环境变量之外的其他任何启动命令或脚本

参考文献

  • CentOS7设置环境变量_centos7 配置环境变量-CSDN博客
  • 鸟哥的Linux私房菜 基础学习篇 第四版 (豆瓣) (douban.com) 第10章
  • Linux命令行与shell脚本编程大全(第4版) (豆瓣) (douban.com) 第五章、第六章
  • /etc/environment,/etc/profile区别_etc envirnoment-CSDN博客

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.ryyt.cn/news/29192.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈,一经查实,立即删除!

相关文章

OpenDiary 24.5

我去!五月了我去!五月了 一亿年没更日寄了pixiv 100277433四月后日谈 鉴于整个四月基本没记日记,有必要开展一次考古活动 因为考古是比较困难的事情,所以想到什么就写什么了打了一整月的 p5r,四月下旬全都在高强度 p5r,每天都情不自禁打很长很长时间 一个月打了 93h 之多…

第八章——软件工程基础知识

软件工程概述,软件开发模型,软件开发方法,需求分析,系统设计,系统测试,软件开发项目管理,软件质量,软件度量第八章——软件工程基础知识 软件工程概述 软件开发模型 软件开发方法 需求分析 系统设计 系统测试 软件开发项目管理 软件质量 软件度量

Linux 中如何设置每个特定的时间执行特定的程序

那会突然想到一个问题,如何每隔一段时间执行特定的程序。想到了如下的一种方法: 测试如下: 一个小问题,比如 每隔5秒统计一个特定文件的行数 001、[b20223040323@admin1 test]$ ls false.gff pan.fna pan.fna.fai record.sh true.gff variable.gff x_variable_protei…

TextMeshPro - 艺术字(图片字)

1、首先要有一张包含了图片字的图集,每个图片字一个Spirte 2、然后右键 -> 创建创建好的TMP_Sprite Asset 3、编辑Sprite Character Table 调整顺序,将index和图片数字对上 修改下Unicode值(默认都是0xFFFE),比如9的Unicode为0x0039。(注意:填写完后,按Enter没用,…

注册表延长Windows更新时间

打开注册表【Win】+【R】打开运行窗口输入regedit在输入框中输入计算机\HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\WindowsUpdate\UX\Settings后回车在右侧空白处选择新建->DWORD(32位)值(D)命名为FlightSettingsMaxPauseDays,选中10进制数据数值为暂停更新的天数。 确定后关…

Face Detection API

一个针对图像中的人脸进行识别的底层加速平台组件<!DOCTYPE html> <html lang="en"><head><meta charset="UTF-8" /><meta name="viewport" content="width=device-width, user-scalable=no, initial-scale=1.0…

如果你还不了解 Java Class 文件结构,来看看这篇吧

文章首发于【Java天堂】,跟随我探索Java进阶之路!Class文件是什么 Java Class文件是Java编译器将源代码编译后的二进制表示,它是Java虚拟机(JVM)运行的基础。 Class文件绝大部分内容是在1997年发布的第一版《Java虚拟机规范》中就已经定义好的,后续20多年的发展过程当中J…

.NET有哪些好用的定时任务调度框架

前言 定时任务调度的相关业务在日常工作开发中是一个十分常见的需求,经常有小伙伴们在技术群提问:有什么好用的定时任务调度框架推荐的?今天大姚给大家分享5个.NET开源、简单、易用、免费的任务调度框架,帮助大家在做定时任务调度框架技术选型的时候有一个参考。以下开源任…