#!/bin/bash
#color
red='\033[0;31m'
green='\033[0;32m'
yellow='\033[0;33m'
plain='\033[0m'
read -p "请输入你的用户名[admin]: " Username
echo -e "$yellow" ["You UserName:"${Username:-admin}] "$plain" #当Username为空时值为admin,不为空显示你输入的
#---------------------------------------------------------------------------
#read -p "请输入你的用户名[admin]: " Username
#echo "You UserName:"${Username:+admin} #当Username不为空时值为admin,为空时没有结果
#-----------------------------------------------------------------------------
#read -p "请输入你的用户名[admin]: " Username
#echo "You UserName:"${Username:?admin} #当Username不为空时值为admin,为空时报错
#-----------------------------------------------------------------------------
# 缺省值的替换
${parameter:-word} # 为空替换
${parameter:=word} # 为空替换,并将值赋给$parameter变量
${parameter:?word} # 为空报错
${parameter:+word} # 不为空替换
${#parameter} # 获得字符串的长度
# 截取字符串,有了着四种用法就不必使用cut命令来截取字符串了。
# 在shell里面使用外部命令会降低shell的执行效率。特别是在循环的时候。
${parameter%word} # 最小限度从后面截取word
${parameter%%word} # 最大限度从后面截取word
${parameter#word} # 最小限度从前面截取word
${parameter##word} # 最大限度从前面截取word
特殊使用
# 分片
# 直接通过 ${数组名[@或*]:起始位置:长度} 切片原先数组,返回是字符串,中间用“空格”分开,因此如果加上”()”,将得到切片数组,
上面例子:c 就是一个新数据。
a=(1 2 3 4 5)
echo ${a[@]:0:3}
1 2 3
echo ${a[@]:1:4}
2 3 4 5
c=(${a[@]:1:4})
echo ${#c[@]}
4
echo ${c[*]}
2 3 4 5
# 替换:调用方法是:${数组名[@或*]/查找字符/替换字符} 该操作不会改变原先数组内容,如果需要修改,可以看上面例子,重新定义数据。
a=(1 2 3 4 5)
echo ${a[@]/3/100}
1 2 100 4 5
echo ${a[@]}
1 2 3 4 5
a=(${a[@]/3/100})
echo ${a[@]}
1 2 100 4 5