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=$' \t\n'
创建局部变量和全局变量
创建局部变量的方法很简单,就是变量名=值
,例如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