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=expr var=expr |
str不变 var= |
str不变 var=$str |
var=${str:=expr | str=expr var=expr |
str=expr var=expr |
str不变 var=$str |
var=${str?expr | expr输出至stderr | var=expr | var=$str |
var=${str:?expr | expr输出至stderr | expr输出至stderr | var=$str |