shell编程基础

全局变量与局部变量

全局变量(global variables)

printenv就可以打印全局变量,里面会包括系统生成的全局环境变量和用户自定义的环境变量。

下面列出部分CentOS的全局环境变量:

XDG_SESSION_ID=226
HOSTNAME=centos7.yulongjun.com #主机名
TERM=xterm-256color  #颜色方案
SHELL=/bin/bash    #当前使用的shell
HISTSIZE=1000      #历史命令最大条目
SSH_CLIENT=172.17.251.64 50610 22 # ssh client信息,也就是我登录的地址信息
SSH_TTY=/dev/pts/2 # 我的终端号
USER=root # 当前用户名
LS_COLORS=xxxxxxxxxxxxxxxx #ls时文件的配色,太长了省略
MAIL=/var/spool/mail/root # 当前用户的系统邮件存放的位置
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin # 命令的查找路径
PWD=/app/scripts # 当前目录
LANG=en_US.UTF-8 # 当前使用的语言
HISTCONTROL=ignoredups # 历史命令控制选项,当前只有一个:去除连续重复的命令
SHLVL=1 #shell 层级,当前只有一层shell
HOME=/root # 当前用户家目录
LOGNAME=root # 登录用户名
SSH_CONNECTION=172.17.251.64 50610 172.17.37.200 22 # ssh连接信息,两端的信息都有
OLDPWD=/app # 前一个工作目录

 可以只打印某一个全局环境变量,有两种方法,记得要用echo调用变量的话,要在变量名前面加一个$

[root@centos7 ~]# printenv HOME
/root
[root@centos7 ~]# echo $HOME
/root

 全局变量可用于子shell中(也可以用于当前shell下运行的脚本中,其实运行脚本就是在子shell中运行的):

[root@centos7 ~]# bash
[root@centos7 ~]# bash
[root@centos7 ~]# ps -f --forest
UID        PID  PPID  C STIME TTY          TIME CMD
root     25202 25198  0 14:22 pts/2    00:00:00 -bash
root     26148 25202  0 15:44 pts/2    00:00:00  \_ bash
root     26180 26148  0 15:45 pts/2    00:00:00      \_ bash
root     26207 26180  0 15:45 pts/2    00:00:00          \_ ps -f --forest
[root@centos7 ~]# echo $HOME
/root
[root@centos7 ~]# exit
exit
[root@centos7 ~]# exit
exit

 局部变量(local variables)

没有专门的命令查看局部变量,只有一个set命令,会显示当前bash进程设置的所有变量,包括全局和局部。

[root@centos7 ~]# set
ABRT_DEBUG_LOG=/dev/null
BASH=/bin/bash
BASHOPTS=checkwinsize:cmdhist:expand_aliases:extglob:extquote:force_fignore:histappend:interactive_comments:login_shell:progcomp:promptvars:sourcepath
BASH_ALIASES=()
BASH_ARGC=()
BASH_ARGV=()
BASH_CMDS=()
BASH_COMPLETION_COMPAT_DIR=/etc/bash_completion.d
...
HISTSIZE=1000
HOME=/root
HOSTNAME=centos7.yulongjun.com
HOSTTYPE=x86_64
ID=0
IFS=$' 	
'

创建局部变量和全局变量

创建局部变量的方法很简单,就是变量名=值,例如var=10

把局部变量export之后就是全局变量了。

[root@centos7 ~]# var=10
[root@centos7 ~]# echo $var
10
[root@centos7 ~]# bash
[root@centos7 ~]# echo $var
[root@centos7 ~]# exit
exit
[root@centos7 ~]# echo $var
10
[root@centos7 ~]# export var
[root@centos7 ~]# echo $var
10
[root@centos7 ~]# bash
[root@centos7 ~]# echo $var
10

调用变量

$变量名即可调用变量,既返回(return)变量的值。

例如:

[root@centos7 ~]# var=10
[root@centos7 ~]# echo $var
10
[root@centos7 ~]# echo $USER
root
[root@centos7 ~]# echo "My hostname is $HOSTNAME"
My hostname is centos7.tanxiaojun.com
[root@centos7 ~]# echo $PATH
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin
[root@centos7 ~]# export PATH=$PATH:/root/bin
[root@centos7 ~]# echo $PATH
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin:/root/bin

tips:PATH=$PATH:/root/bin看起来可能有点绕,其实就是$PATH取出原有的PATH的值,然后和后面的:/root/bin字符串连接起来,然后把连接后的字符串赋值给PATH

删除环境变量

unset 变量名

unset之后,调用变量就是空的。

[root@centos7 ~]# unset var
[root@centos7 ~]# echo $var
原文地址:https://www.cnblogs.com/tanxiaojun/p/10464736.html