Shell变量的默认值与内容替换


变量内容的替换,替换不影响原变量内容。
1, 定义一个变量进行演示

1
url=https://www.x-pua.cn

2, 替换x-pua为baidu

1
2
[[email protected] ~]# echo ${url/x-pua/baidu}
https://www.baidu.cn

3, 替换第一个w为大写W

1
2
[[email protected] ~]# echo ${url/w/W}
https://Www.x-pua.cn

4, 替换所有w为大写W

1
2
[[email protected] ~]# echo ${url//w/W}
https://WWW.x-pua.cn

为变量设置默认值
1, 下列变量作为举例使用

1
2
3
4
5
6
7
8
-- url1变量没有定义 --
[[email protected] ~]# echo $url1

-- url2变量为www.deepin.org --
[[email protected] ~]# echo $url2
www.deepin.org
-- url3变量定义了,但是为空 --
[[email protected] ~]# echo $url3

2, 为未定义变量和空值变量设置默认值

1
2
3
4
5
6
7
8
9
-- 由于url1变量没有定义,所以默认值会生效 --
[[email protected] ~]# echo ${url1:-www.x-pua.cn}
www.x-pua.cn
-- 由于url2有自己的变量,所以默认值不会生效 --
[[email protected] ~]# echo ${url2:-www.x-pua.cn}
www.deepin.org
-- 由于url3变量为空值,所以默认值会生效 --
[[email protected] ~]# echo ${url3:-www.x-pua.cn}
www.x-pua.cn

3, 通过实际需求来验证默认值的作用

1
2
3
4
5
[[email protected] ~]# cat test.sh
#!/usr/bin/env bash

read -p '请输入您要查询的ip: ' ip
ping -c 1 ${ip} &> /dev/null && echo "${ip} is alive"

下面来执行一下这个脚本看看效果

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
-- 手动输入可用ip --
[[email protected] ~]# ./test.sh
请输入您要查询的ip: 114.114.114.114
114.114.114.114 is alive
-- 什么也不输入直接回车 --
[[email protected] ~]# ./test.sh
请输入您要查询的ip:
[[email protected] ~]#
**可以看到,不手动指定ip什么结果也不会返回。下面让我们来为变量ip设置一个默认值**
[[email protected] ~]# cat test.sh
#!/usr/bin/env bash

read -p '请输入您要查询的ip: ' ip
ping -c 1 ${ip:-8.8.8.8} &> /dev/null && echo "${ip:-8.8.8.8} is alive"
**再次来执行一下这个脚本**
-- 手动指定需要查询的ip --
[[email protected] ~]# ./test.sh
请输入您要查询的ip: 9.9.9.9
9.9.9.9 is alive
-- 什么也不输入直接回车 --
[[email protected] ~]# ./test.sh
请输入您要查询的ip:
8.8.8.8 is alive

可以看到这时候变量ip已经拥有默认值了!
这个默认值还是很有用的,可以避免一些脚本不必要的bug。
还可以提高数据的安全性,例如数据库相关脚本,where “条件”=“” 有可能会酿成大祸哦!