shell变量
Posted 骑着赶路
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了shell变量相关的知识,希望对你有一定的参考价值。
一 变量的分类
1 环境变量
1 )什么是环境变量
例如你执行 ls 这个命令时,系统会通过PATH这个变量里面的内容所记录的路径顺序来查找命令。如果在PATH变量内的路径还找不到 ls 这个命令,就会在屏幕显示‘command not found’ 的错误信息。
在linux下,所有的执行都是需要一个执行码。就如同上面提到的,你真正以 shell 来跟 linux 通信,是在正确的登录 linux 之后。这个时候你就有一个 bash 的执行程序,也才可以真正的经由 bash 来跟系统通信。而在进入 shell 之前,也正如上面提到的,由于系统需要一些变量来提供它数据的访问(或者是一些环境的设置参数值,例如是否要显示彩色等等),所以就有一些所谓的‘环境变量’需要来读入系统中。除了PATH,还有HOME,MAIL,SHELL等。环境变量通常以大写字符来表示。
2)环境变量的功能
查看环境变量:env
[[email protected] mail]# env XDG_SESSION_ID=4094 HOSTNAME=iz2ze5xd9ppdog0cch5vs0z HARDWARE_PLATFORM=x86_64 TERM=xterm SHELL=/bin/bash HISTSIZE=1000 SSH_CLIENT=111.196.244.62 18286 22 OLDPWD=/var/spool SSH_TTY=/dev/pts/1 USER=root LS_COLORS=rs=0:di=01;34:ln=01;36:mh=00:pi=40;33:so=01;35:do=01;35:bd=40;33;01:cd=40;33;01:or=40;31;01:mi=01;05;37;41:su=37;41:sg=30;43:ca=30;41:tw=30;42:ow=34;42:st=37;44:ex=01;32:*.tar=01;31:*.tgz=01;31:*.arc=01;31:*.arj=01;31:*.taz=01;31:*.lha=01;31:*.lz4=01;31:*.lzh=01;31:*.lzma=01;31:*.tlz=01;31:*.txz=01;31:*.tzo=01;31:*.t7z=01;31:*.zip=01;31:*.z=01;31:*.Z=01;31:*.dz=01;31:*.gz=01;31:*.lrz=01;31:*.lz=01;31:*.lzo=01;31:*.xz=01;31:*.bz2=01;31:*.bz=01;31:*.tbz=01;31:*.tbz2=01;31:*.tz=01;31:*.deb=01;31:*.rpm=01;31:*.jar=01;31:*.war=01;31:*.ear=01;31:*.sar=01;31:*.rar=01;31:*.alz=01;31:*.ace=01;31:*.zoo=01;31:*.cpio=01;31:*.7z=01;31:*.rz=01;31:*.cab=01;31:*.jpg=01;35:*.jpeg=01;35:*.gif=01;35:*.bmp=01;35:*.pbm=01;35:*.pgm=01;35:*.ppm=01;35:*.tga=01;35:*.xbm=01;35:*.xpm=01;35:*.tif=01;35:*.tiff=01;35:*.png=01;35:*.svg=01;35:*.svgz=01;35:*.mng=01;35:*.pcx=01;35:*.mov=01;35:*.mpg=01;35:*.mpeg=01;35:*.m2v=01;35:*.mkv=01;35:*.webm=01;35:*.ogm=01;35:*.mp4=01;35:*.m4v=01;35:*.mp4v=01;35:*.vob=01;35:*.qt=01;35:*.nuv=01;35:*.wmv=01;35:*.asf=01;35:*.rm=01;35:*.rmvb=01;35:*.flc=01;35:*.avi=01;35:*.fli=01;35:*.flv=01;35:*.gl=01;35:*.dl=01;35:*.xcf=01;35:*.xwd=01;35:*.yuv=01;35:*.cgm=01;35:*.emf=01;35:*.axv=01;35:*.anx=01;35:*.ogv=01;35:*.ogx=01;35:*.aac=01;36:*.au=01;36:*.flac=01;36:*.mid=01;36:*.midi=01;36:*.mka=01;36:*.mp3=01;36:*.mpc=01;36:*.ogg=01;36:*.ra=01;36:*.wav=01;36:*.axa=01;36:*.oga=01;36:*.spx=01;36:*.xspf=01;36: MAIL=/var/spool/mail/root PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/usr/local/python3/bin:/root/bin PWD=/var/spool/mail LANG=en_US.UTF-8 HISTCONTROL=ignoredups SHLVL=1 HOME=/root LOGNAME=root XDG_DATA_DIRS=/root/.local/share/flatpak/exports/share/:/var/lib/flatpak/exports/share/:/usr/local/share/:/usr/share/ SSH_CONNECTION=111.196.244.62 18286 172.17.253.169 22 LESSOPEN=||/usr/bin/lesspipe.sh %s XDG_RUNTIME_DIR=/run/user/0 _=/usr/bin/env
环境变量的使用
[[email protected] mail]# cd $HOME [[email protected] ~]# pwd /root
说明:
$ 本身也是个变量。这个代表的是目前这个 shell 的线程代号,即所谓的 PID。
[[email protected] ~]# echo $$ 20155
?也是一个特殊的变量。这个变量是上一次执行的命令所回传的值。如果一个命令成功执行,就会回传 0 。如果执行失败,则会回传一个非0。
[[email protected] ~]# eech $? bash: eech: command not found... ^[[A^C [[email protected] ~]# echo $? 130 [[email protected] ~]# echo $? 0
2 自定义变量
二 变量的显示与设置
1 变量的显示:echo
变量前面必须加上字符 ‘$’
[[email protected] mail]# echo $MAIL /var/spool/mail/root [[email protected] mail]# echo ${MAIL} /var/spool/mail/root [[email protected] mail]# echo ${PATH} /usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/usr/local/python3/bin:/root/bin [[email protected] mail]# echo $PATH /usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/usr/local/python3/bin:/root/bin
2 变量的设置
变量未赋值之前为空
[[email protected] mail]# echo $name [[email protected] mail]# name=zuo [[email protected] mail]# echo $name zuo
3 变量的设置规则
1)双引号内的特殊字符如 $ 等,可以保有原本的特性。
单引号内的特殊字符则仅为一般字符,即纯文本。
即双引号仍然可以保有变量的内容。
[[email protected] mail]# echo $name zuo [[email protected] mail]# var="my name is $name" [[email protected] mail]# echo $var my name is zuo [[email protected] mail]# var1=‘my name is $name‘ [[email protected] mail]# echo $var1 my name is $name
2)变量名只能是英文字母或数字,但开头字符不能是数字
3)变量名与变量内容以一个等号 ‘=’ 来连接。
4)若该变量为了增加变量内容时,则可用 "$变量名" 或 ${变量} 累加内容,如下所示:
PATH="$PATH":/home/bin
5)若该变量需要在其它子进程执行,则需要以 export 来是变量变成 环境变量
export PATH
6)取消变量的方法为使用 "unset变量名称"
7)可以用反单引号 ` 命令 ` 或 $(命令) 。` ` 之内的命令会先被执行,其执行出来的结果将作为外部的输入信息。
[[email protected] mail]# version=`uname -r` [[email protected] mail]# echo $version 3.10.0-693.2.2.el7.x86_64
三 变量的键盘读取 read 与声明declare
1 read [ -pt ] variable
参数
-p:接提示符
-t:等待的秒数
示例:
[[email protected] ~]# read atest xxx [[email protected] ~]# echo $atest xxx [[email protected] ~]# read -p ‘please input atest1:‘ atest1 please input atest1:yyy [[email protected] ~]# echo $atest1 yyy
2 declare [ -aixr ] variable
参数
-a:数组类型 array
-i:整数类型 integer
-x:与export一样,将变量设为环境变量
-r:将变量设为readonly。该变量不可被更改内容,也不能重设。
示例1 :
[[email protected] ~]# sum=100+50 [[email protected] ~]# echo $sum 100+50 [[email protected] ~]# declare -i sum=100+50 [[email protected] ~]# echo $sum 150
[[email protected] ~]# declare -i a=1/3 [[email protected] ~]# echo $a 0
原因:在默认的情况下,变量类型默认为‘字符串’,所以如果不指定变量类型,100+50,为一个“字符串”,而不是 ‘“计算式”
bash环境中的数值运算,默认做多仅能达到整数类型
示例2 :
[[email protected] ~]# export | grep sum [[email protected] ~]# declare -x sum [[email protected] ~]# export | grep sum declare -ix sum="150" [[email protected] ~]# declare +x sum [[email protected] ~]# export | grep sum
原因:-x 将变量设置为环境变量
将 - 变为 + ,取消环境变量。
四 变量内容的删除,替代与替换
${变量名#xxx}
${变量名##xxx}
${变量名%xxx}
${变量名%%xxx}
${变量名/xxx/XXX}
${变量名//xxx//XXX}
以上是关于shell变量的主要内容,如果未能解决你的问题,请参考以下文章