💎一站式轻松地调用各大LLM模型接口,支持GPT4、智谱、星火、月之暗面及文生图 广告
# :-: **变量1-规范-环境变量-普通变量** [TOC] # **一、shell脚本基本知识** ## **1.基础** ### 1)脚本解释器: 第一行写明解释器,井号在第一行则为解释器,不同的语言用不同的解释器 `#!/bin/bash` ### 2)脚本注释: 在非第一行用井号进行注释,可开新行,也可以在该行命令后面,不要用中文 ### 3)脚本执行: ``` bash test.sh #文件无执行权限都可以执行,推荐方式 ./test.sh #使用路径执行,文件需要有执行权限 source test.sh #不启用子进程执行脚本,source和 .作用相同 ``` > 前两种都会启用子进程,子进程的变量不会传递到主进程, ## **2.shell脚本规范** 脚本第一行指定脚本解释器 开头增加版本及版权信息 脚本中尽量不要使用中文 脚本以.sh为扩展名 脚本应存放在固定的路径里 成对的符合尽量一次性写出来,再退格插入内容 中括号两端至少要有一个空格 对流程控制语句,应一次性写完格式再添加内容 通过缩进让代码更易读 ## **3.引号的用法** * 双引号 常规字符串的定义用双引号. * 单引号 所见及所得的引用使用单引号. * 反引号 命令的引用使用反引号. > 所有引号为英文状态符号,等号前后不要有空格 # **二、shell环境变量** 系统用export内置命令导出的变量,存在于/etc/profile,/etc/bashrc和用户家目录下的.bash\_profile,.bashrc中,要自定义环境变量,要将命令写入上述文件中 环境变量均采用大写字母形式,使用export定义,如export OLDGIRL=1 定时任务crond比较特殊,最好在脚本中重新定义要用的环境变量 ## **1. 环境变量查看** ### 1. 查看所有变量 | 命令名 | 作用 | | --- | --- | |set|输出所有的变量,包括全局变量和局部变量| |env|只显示全局变量| |declare|输出所有的变量、函数、整数、已导出的变量| |set -o| 显示bash shell的所有参数配置信息| ### 2. 查看指定变量的值 ``` echo $PWD /home/root printf $PWD /home/root ``` ### 3. 取消设置的变量 `unset USER` ## **2. 定义环境变量** ### 1. 三种方法 ``` export NAME=oldboy declare -x NAME=oldboy NAME=oldboy ;export NAME ``` ### 2. 环境变量永久生效 * 用户配置下生效 ``` /root/.bashrc #推荐 /root/.basrc\_profile ``` * 全局配置下生效 ``` /etc/profile /etc/bashrc #推荐 /etc/profile.d/ ``` > 若要在登录后初始化或显示加载内容,则把脚本文件放到/etc/profile.d/下即可 ### 3. 环境变量生效顺序 * 登录方式: /etc/profile-->/etc/profile.d/-->$HOME/.bash\_profile-->/$HOME/.bashrc-->/etc/bashrc * 非登录方式: /$HOME/.bashrc-->/etc/bashrc. > 因此需要再非登录shell下也可以读到设置的环境变量是,需要将环境变量写入最后两个文件中 ## **3. 其他** ### 1) 设置登录后shell提示语 ``` /etc/motd #写字符串提示语 /etc/profile.d/oldboy.sh #登录后执行脚本,脚本里面为提示语 ``` ### 2) java环境下自定义环境变量 ``` export JAVA\_HOME=/application/jdk export CLASSPATH=$CLASSPATH:$JAVA\_HOME/lib:$JAVA\_HOME/jre/lib export PATH=$JAVA\_HOME/bin:$JAVA\_HOME/jre/bin:$PATH:HOME/bin export RESIN\_HOME=/application/resin ``` > 通常放置在/etc/profile中,并在java脚本中再次定义上述变量 ### 3) 常见系统环境变量 |变量|用途| | --- | --- | |$HOME|用户登录时进入的目录 |$UID|当前用户的uid| |$PWD|当前工作目录的决定路径| |$SHELL|当前shell| |$USER|当前用户| # **三、普通变量** 本地变量只在当前shell生存期中有意义,脚本中启动另一个进程或退出,值都将无效 ## **1. 变量定义要求** 变量名由字母、数字、下划线主从,不能以数字开头,变量定义可以使用单引号、双引号、反引号,也可以不用引号 ``` a='laowang' a="laowang" a=`pwd` a=pwd ``` ### **2. 变量定义和输出经验小结** * 若变量内容为连续的数字或字符串,赋值时,可以不加引号 * 变量的内容很多,或者不是连续字符串时,加双引号 * 希望原样输出变量中的内容时,加单引号 * 赋值的命令要用反引号或括号扩起来,如a=`ls`或者a=$(ls) * 变量名定义要规范,要见名知意,推荐驼峰语法 * 输出变量时,变量名前加$符号 * 变量名后接其他字符时,用大括号单独括变量,{金庸}新著