变量的取用:echo
echo $variable
echo $PATH
echo ${PATH}
变量的配置守则
- 变量与变量内容以一个等号’='来连接,如下所示:
myname=VBird - 等号两边不能直接接空格符,如下所示为错误:
myname = VBird 或者 mayname=VBird Tsai - 变量名称只能是英文字母与数字,但是开头字符不能是数字,如下为错误:
2myname=VBird - 变量内容若有空格符可使用双引号"或单引号’将变量内容结合起来,但双引号内的特殊字符如$等,可以包邮原本的特性,如下所示:
var=“lang is $LANG” 则可得 lang is en_US
单引号内的特殊字符则仅为一般字符(纯文本),如下所示:
var=‘long is $LANG’ 则可得 ‘lang is $LANG’ - 可用跳脱字符’'将特殊符号(如[Enter],$,,空格符,'等)变成一般字符;
- 在一串命令中,还需要籍由其他的命令提供的信息,可以使用反单引号 `命令`或$ 命令。特别注意,哪个`是键盘上方的数字键1左边的那个按键,而不是单引!!!
例如想要取得核心版本的配置:
version=$(uname -r)再echo $version 可得2.6.18-128.el6 - 若该变量为扩增变量内容时,则可用"$变量"或者${变量}累加内容,如下所示:
PATH="$PATH":/home/bin
PS.我一般用${变量},再变量拼接的时候尤其重要,name=$nameyes,name的内容时$nameyes这个变量;name=${name}yes,可以$name和yes拼接起来 - 若该变量需要再其他子程序运行,则需要以export来变量变成环境变量:
exprot PATH - 通常大写字符为系统默认变量,自行配置变量可以是哟了那个小写字符,方便判断(纯粹依靠使用者兴趣与嗜好);
- 取消变量的方法为使用unset: unset 变量名称 例如取消myname的配置:
unset myname
变量内容的删除、取代与替换
范例一:先让小写的path自定义变量配置的PATH内容相同
path=${PATH}
echo $PATH
/usr/kerberos/sbin:/usr/kerberos/bin:/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin
范例二:假设要将钱连个目录删除掉,如何显示?
echo ${paht#/*kerberos/bin:}
/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin
解释

范例三:我想要删除前面所有的目录,仅保留最后一个目录
echo ${path##/*:}
/root/bin
多加了一个#变成##之后,变成”删除掉最长的那个数据“
- #:符合取代文字的"最短的"那一个
- ##:符合取代文字的”最长的“那一个
如果想要"从后面向前删除变量的内容"呢?这个时候就要使用百分号(%)符号了
范例四:我想要删除最后面那个目录,亦即从:到bin为止的字符串
echo ${path%:*bin}
/usr/kerberos/sbin:/usr/kerberos/bin:/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
范例五:;那如果我只想要保留第一个目录呢?
echo ${path%%:*bin}
/usr/kerberos/sbin
了解删除功能后,接下来谈谈取代吧
范例六:将path的变量内容内的sbin取代成大写SBIN:
echo ${path/sbin/SBIN}
/usr/kerberos/SBIN:/usr/kerberos/bin:/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin
这部分就容易理解多了!关键词在于连个斜线,两斜线中间的是旧字符串,后面的是新字符串
echo ${path//sbin/SBIN}
/usr/kerberos/SBIN:/usr/kerberos/bin:/usr/local/SBIN:/usr/local/bin:/SBIN:/bin:/usr/SBIN:/usr/bin:/root/bin
若果是两条斜线,那么就变成所有符合的内容都会被取代
总结
| 变量配置方式 | 说明 |
|---|---|
| ${变量#关键词} ${变量##关键词} | 若变量内容从头开始的数据符合"关键词",则将符合的最短数据删除 若变量内容从头开始的数据符合"关键词",则将符合的最长数据删除 |
| ${变量%关键词} ${变量%%关键词} | 若变量内容从尾向前的数据符合"关键词",则将符合的最短数据删除 若变量内容从尾向前的数据符合"关键词",则将符合的最长数据删除 |
| ${变量/旧字符串/新字符串} ${变量//旧字符串/新字符串} | 若变量内容符合"旧字符串",则"第一个旧字符串会被新字符串取代" 若变量内容符合"旧字符串" 则 “全部的旧字符串会被新字符串取代” |
变量的测试与内容替换
在某些时刻我们常常需要"判断"某个变量是否存在,若变量存在则使用既有的配置,若变量不存在则给予一个常用的配置。
范例一:测试一下是否存在 username 这个变量,若不存在则基于username内容为root
echo $username
<==由于出现空白,所以 username 可能不存在,也可能是空字符串
username=${username-root}
echo $username
root <==因为 username 没有配置,所以主动给予名为 root 的内容。
username="vbird tsai" <==主动配置 username 的内容
username=${username-root}
echo $username
vbird tsai <==因为 username 已经配置了,所以使用旧有的配置而不以 root 取代
范例二:若 username 未配置或为空字符串,则将 username 内容配置为 root
username=""
username=${username-root}
echo $username
<==因为 username 被配置为空字符串了!所以当然还是保留为空字符串!
username=${username:-root}
echo $username
root <==加上『 : 』后若变量内容为空或者是未配置,都能够以后面的内容替换!
| 变量配置方式 | 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= | var=$str |
| var=${str:?expr} | expr 输出至 stderr | expr 输出至 stderr | var=$str |
本文深入讲解Shell脚本中变量的取用、配置守则、测试与内容替换等关键操作,包括变量的删除、取代与替换技巧,以及环境变量的设置方法。
425

被折叠的 条评论
为什么被折叠?



