前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Linux-Shell变量

Linux-Shell变量

作者头像
悠扬前奏
发布2019-05-30 20:26:44
3.1K0
发布2019-05-30 20:26:44
举报

1. 变量的设置,读取

1.1变量的读取

  • echo读取变量
  • 变量前加$
  • 可以把变量用大括号({})包裹
[root@iZwz9ayvrn26ptadymu9ymZ ~]# echo $PATH
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin

1.2 变量的设定

  • 等号(=)设定变量的值 *等号两边不能有空格
  • 变量名称只能是英文或者数字,且数字不能在开头
  • 变量内容有空格符,需要用双引号(")或者单引号(')包裹变量内容
    • 双括号内的$可以引用其他的变量值
    • 单引号内的$作为一般字符
[root@iZwz9ayvrn26ptadymu9ymZ ~]# name=junzerg
[root@iZwz9ayvrn26ptadymu9ymZ ~]# echo "hello $name"
hello junzerg
[root@iZwz9ayvrn26ptadymu9ymZ ~]# echo 'hello $name'
hello $name
  • 反斜线(\)可以将特殊符号转化成一般字符
  • 返单引号(`),【$()】,可以引用命令执行的结果
[root@iZwz9ayvrn26ptadymu9ymZ ~]# version1=`uname -r`
[root@iZwz9ayvrn26ptadymu9ymZ ~]# version2=$(uname -r)
[root@iZwz9ayvrn26ptadymu9ymZ ~]# echo "version1:$version1;version2:$version2"
version1:3.10.0-693.2.2.el7.x86_64;version2:3.10.0-693.2.2.el7.x86_64
  • 【"$variable"】,【${variable}】可以扩增变量内容
[root@iZwz9ayvrn26ptadymu9ymZ ~]# name="$name"name
[root@iZwz9ayvrn26ptadymu9ymZ ~]# echo $name
junzergname
[root@iZwz9ayvrn26ptadymu9ymZ ~]# name=${name}name
[root@iZwz9ayvrn26ptadymu9ymZ ~]# echo $name
junzergnamename
  • export 命令使变量变成环境变量
  • 一般大写字符为系统变量,小写字符为自定义变量
  • unset命令取消变量

2.环境变量

2.1 evn查看环境变量

[root@iZwz9ayvrn26ptadymu9ymZ ~]# env
XDG_SESSION_ID=3100
HOSTNAME=iZwz9ayvrn26ptadymu9ymZ
TERM=xterm
SHELL=/bin/bash
HISTSIZE=1000
SSH_CLIENT=114.93.110.210 53662 22
OLDPWD=/lib/modules/3.10.0-693.2.2.el7.x86_64
SSH_TTY=/dev/pts/0
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:/root/bin
PWD=/root
LANG=en_US.UTF-8
HISTCONTROL=ignoredups
SHLVL=1
HOME=/root
LOGNAME=root
SSH_CONNECTION=114.93.110.210 53662 172.18.207.76 22
LESSOPEN=||/usr/bin/lesspipe.sh %s
XDG_RUNTIME_DIR=/run/user/0
_=/usr/bin/env
  • HOME:用户家目录
  • SHELL:当前环境的SHELL
  • HISTORY:系统记录的历史指令数量
  • MAIL:mail命令邮件文件保存的文件夹
  • PATH:执行文件查询路径,目录与目录间用冒号(:)分隔
  • LANG:语系
  • RANDOM:随机数变量,在BASH环境中该变量范围是[0,32767]

2.2 set查看所有变量

[root@iZwz9ayvrn26ptadymu9ymZ ~]# set
BASH=/bin/bash
BASHOPTS=checkwinsize:cmdhist:expand_aliases:extquote:force_fignore:histappend:hostcomplete:interactive_comments:login_shell:progcomp:promptvars:sourcepath
BASH_ALIASES=()
BASH_ARGC=()
BASH_ARGV=()
BASH_CMDS=()
BASH_LINENO=()
BASH_SOURCE=()
BASH_VERSINFO=([0]="4" [1]="2" [2]="46" [3]="2" [4]="release" [5]="x86_64-redhat-linux-gnu")
BASH_VERSION='4.2.46(2)-release'
COLUMNS=81
DIRSTACK=()
EUID=0
GROUPS=()
HISTCONTROL=ignoredups
HISTFILE=/root/.bash_history
HISTFILESIZE=1000
HISTSIZE=1000
HOME=/root
HOSTNAME=iZwz9ayvrn26ptadymu9ymZ
HOSTTYPE=x86_64
ID=0
IFS=$' \t\n'
LANG=en_US.UTF-8
LESSOPEN='||/usr/bin/lesspipe.sh %s'
LINES=24
LOGNAME=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:'
MACHTYPE=x86_64-redhat-linux-gnu
MAIL=/var/spool/mail/root
MAILCHECK=60
OLDPWD=/lib/modules/3.10.0-693.2.2.el7.x86_64
OPTERR=1
OPTIND=1
OSTYPE=linux-gnu
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin
PIPESTATUS=([0]="0")
PPID=18343
PROMPT_COMMAND='printf "\033]0;%s@%s:%s\007" "${USER}" "${HOSTNAME%%.*}" "${PWD/#$HOME/~}"'
PS1='[\u@\h \W]\$ '
PS2='> '
PS4='+ '
PWD=/root
RANDOM=5770
SHELL=/bin/bash
SHELLOPTS=braceexpand:emacs:hashall:histexpand:history:interactive-comments:monitor
SHLVL=1
SSH_CLIENT='114.93.110.210 53662 22'
SSH_CONNECTION='114.93.110.210 53662 172.18.207.76 22'
SSH_TTY=/dev/pts/0
TERM=xterm
UID=0
USER=root
XDG_RUNTIME_DIR=/run/user/0
XDG_SESSION_ID=3100
_=env
colors=/root/.dircolors
name=junzergnamename
  • PS1:命令提示字符设定
    • \d:显示出【星期 月 日】的日期格式
    • \H :完整主机名
    • \h:取主机在第一个小数点之前的名字
    • \t :显示时间,为24小时格式的【HH:MM:SS】
    • \T:显示时间,为12小时格式的【HH:MM:SS】
    • \A:显示时间,为24小时格式的【HH:MM】
    • @:显示时间,为12小时格式的【am/pm】
    • \u:目前使用者账户名
    • \v:BASH版本信息
    • \w:完整工作目录名称,家目录以~代替
    • \W:利用basename函数取得工作目录名称,也就是最后一个目录名
    • #:下达的第几个命令
    • $:提示字符,root为#,其他为$
  • $:本shell的PID
[root@iZwz9ayvrn26ptadymu9ymZ ~]# echo $$
18347
  • ?:上一个指令的执行结果,0代表成功,1-255 代表错误码
[root@iZwz9ayvrn26ptadymu9ymZ ~]# echo $?
0
  • OSTYPE,HOSTTYPE,MACHTYPE:主机硬件与核心的等级
OSTYPE=linux-gnu
HOSTTYPE=x86_64
MACHTYPE=x86_64-redhat-linux-gnu

3. 语系变量

  • locale命令可以查看Linux的语系信息。
    • locale可以查看当前语系信息设定
    • locale -a查看Linux支持的所有语系
  • 系统默认的语系信息保存在/etc/sysconfig/i18n

4. 键盘读取变量

4.1 read读取来自键盘的输入

  • 命令格式:read[-pt] variable
    • -p:设置提示字符
    • -t:设置等待时间,单位秒
[root@iZwz9ayvrn26ptadymu9ymZ ~]# read rtest
123
[root@iZwz9ayvrn26ptadymu9ymZ ~]# echo $rtest
123
[root@iZwz9ayvrn26ptadymu9ymZ ~]# read -p "Enter a word:" -t 10 word
Enter a word:123
[root@iZwz9ayvrn26ptadymu9ymZ ~]# echo $word
123

4.2 declare / typeset

  • declare和typeset都能声明变量的类型。
  • declare命令格式:declare [-aixr] variable
    • -a:声明为数组(array)类型
    • -i:声明为整型(intger)类型
    • -x:声明为环境变量
    • -r:声明为只读(readonly),变量不能被变更,也不能unset
  • declare不带参数同set一样,列出所有变量。
  • 声明为只读的变量,只有注销重新登录新的shell才会复原
[root@iZwz9ayvrn26ptadymu9ymZ ~]# sum1=1+2+3
[root@iZwz9ayvrn26ptadymu9ymZ ~]# declare -i sum=1+2+3
[root@iZwz9ayvrn26ptadymu9ymZ ~]# echo $sum1 $sum
1+2+3 6
  • 数组定义方法为:var[indent]=content
  • 数组读取方法为【${var[indent]}】
[root@iZwz9ayvrn26ptadymu9ymZ ~]# var[0]=a
[root@iZwz9ayvrn26ptadymu9ymZ ~]# var[1]=b
[root@iZwz9ayvrn26ptadymu9ymZ ~]# var[2]=c
[root@iZwz9ayvrn26ptadymu9ymZ ~]# echo "${var[0]},${var[1]},${var[2]}"
a,b,c

5. 变量内容的删除、取代、替换(Optional)

5.1 变量删除

以下为例

[root@iZwz9ayvrn26ptadymu9ymZ ~]# variable=${PATH}
[root@iZwz9ayvrn26ptadymu9ymZ ~]# echo ${variable#/*local/sbin:}
/usr/local/bin:/usr/sbin:/usr/bin:/root/bin
  • # :删除关键字
  • 删除在${}中使用
  • variable 为变量名称
  • *表示通配符,也就是说这里可以使用正则表达式 变量设定关键字如下: / |变量设定方式|说明| |:-|:-| |${变量#关键词}|若变量内容从前往后的数据符合【关键字】 则将符合的最短数据删除| |${变量##关键词}|若变量内容从前往后的数据符合【关键字】 则将符合的最长数据删除| |${变量%关键词}|若变量从后往前的数据符合【关键字】 则将符合的最长数据删除| |${变量%%关键词}|若变量从后往前的数据符合【关键字】 则将符合的最长数据删除| |${变量/旧字符串/新字符串键词}|若变量内容符合【旧字符串】 则第一个旧字符串会被新字符串代替| |${变量//旧字符串/新字符串键词}|若变量内容符合【旧字符串】 则全部的旧字符串都会被新字符串代替|

5.2 变量测试与内容替换

以下为例:减号【-】能够检测变量是否存在,如果存在值跳过,不存在则进行设定。

[root@iZwz9ayvrn26ptadymu9ymZ ~]# echo $name

[root@iZwz9ayvrn26ptadymu9ymZ ~]# name=${name-root}
[root@iZwz9ayvrn26ptadymu9ymZ ~]# echo $name
root
[root@iZwz9ayvrn26ptadymu9ymZ ~]# name=junzerg
[root@iZwz9ayvrn26ptadymu9ymZ ~]# name=${name-root}
[root@iZwz9ayvrn26ptadymu9ymZ ~]# echo $name
junzerg

变量关键字说明如下:

变量设定方式

str没有设定

str为空字符串

str为非空字符串

var=${str-expr

var=expr

var=

var=$str

var=${str:-expr

var=expr

var=expr

var=$str

var=${str+expr

var=

var=expr

var=expr

var=${str:+expr

var=

var=

var=expr

var=${str=expr

str=exprvar=expr

str不变var=

str不变var=$str

var=${str:=expr

str=exprvar=expr

str=exprvar=expr

str不变var=$str

var=${str?expr

expr输出至stderr

var=expr

var=$str

var=${str:?expr

expr输出至stderr

expr输出至stderr

var=$str

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2017.12.26 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1. 变量的设置,读取
    • 1.1变量的读取
      • 1.2 变量的设定
      • 2.环境变量
      • 2.1 evn查看环境变量
        • 2.2 set查看所有变量
        • 3. 语系变量
        • 4. 键盘读取变量
          • 4.1 read读取来自键盘的输入
            • 4.2 declare / typeset
            • 5. 变量内容的删除、取代、替换(Optional)
            • 5.1 变量删除
              • 5.2 变量测试与内容替换
              领券
              问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档