字符串初值的处理
2.1 问题
本案例要求编写一个脚本sumx.sh,求从1-x的和,相关要求如下:
从键盘读入x值
当用户未输入任何值时,默认按1计算
2.2 方案
通过${var:-word}判断变量是否存在,决定是否给变量赋初始值。
2.3 步骤
实现此案例需要按照如下步骤进行。
步骤一:认识字符串初值的最常见处理方法
1)只取值,${var:-word}
若变量var已存在且非Null,则返回 $var 的值;否则返回字串“word”,原变量var的值不受影响。
变量值已存在的情况:
[root@svr5 ~]# XX=11
[root@svr5 ~]# echo $XX //查看原变量值
11
[root@svr5 ~]# echo ${XX:-123} //因XX已存在,输出变量XX的值
11
变量值不存在的情况:
[root@svr5 ~]# echo ${YY:-123} //因YY不存在,输出“123”
123
编写一个验证知识点的参考示例脚本如下:
[root@svr5 ~]# cat /root/test.sh
#!/bin/bash
read -p "请输入用户名:" user
read -p "请输入用户名:" pass
[ -z $user ] && exit //如果无用户名,则脚本退出
pass=${pass:-123456} //如果用户没有输入密码,则默认密码为123456
useradd $user
echo "$pass" | passwd --stdin $pass
步骤二:编写sumx.sh脚本,处理read输入的初值
用来从键盘读入一个正整数x,求从1到x的和;当用户未输入值(直接回车)时,为了避免执行出错,应为x赋初值1 。
1)脚本编写参考如下
[root@svr5 ~]# vim sumx.sh
#!/bin/bash
read -p "请输入一个正整数:" x
x=${x:-1}
i=1; SUM=0
while [ $i -le $x ]
do
let SUM+=i
let i++
done
echo "从1到$x的总和是:$SUM"
[root@svr5 ~]# chmod +x sumx.sh
2)验证、测试脚本执行效果:
[root@svr5 ~]# ./sumx.sh
请输入一个正整数:25 //输入25,正常读入并计算、输出结果
从1到25的总和是:325
[root@svr5 ~]# ./sumx.sh
请输入一个正整数:70 //输入70,正常读入并计算、输出结果
从1到70的总和是:2485
[root@svr5 ~]# ./sumx.sh
请输入一个正整数: //直接回车,设x=1后计算、输出结果
从1到1的总和是:1