参数,即我们平常在shell里面定义的变量,一般可以直接使用$符号进行引用
[root@localhost /home/Sudley]#test=1-2-3
[root@localhost /home/Sudley]#echo $test
1-2-3
[root@localhost /home/Sudley]#
下面介绍一些实用的参数扩展
参数扩展 | 描述 |
---|---|
${param:-default} | 如果param为空,即参数未赋值,则将参数赋值为default |
${param:?default} | 如果param为空,则返回param:default并终止命令 |
${param:+default} | 如果param为非空,则将参数赋值为default |
${#param} | 获取参数的长度 |
${param%word} | 由参数尾部开始截掉满足word匹配格式的最短字段 ,返回剩下的部分 |
${param%%word} | 由参数尾部开始截掉满足word匹配格式的最长字段 ,返回剩下的部分 |
${param#word} | 由参数头部开始截掉满足word匹配格式的最短字段 ,返回剩下的部分 |
${param##word} | 由参数头部开始截掉满足word匹配格式的最长字段 ,返回剩下的部分 |
${param:n:m} | 由参数段左边第n个字符开始截取m个字符并返回 ,m为空则返回由n到最后的字符 |
实例演示
[root@localhost /home/Sudley]#cat test.sh
#!/bin/bash
tt=""
echo ${tt:-example}
tt="1-2-3-4"
echo ${tt:-example}
echo ${#tt}
echo ${tt%-*}
echo ${tt%%-*}
echo ${tt#*-}
echo ${tt##*-}
[root@localhost /home/Sudley]#sh test.sh
example
1-2-3-4
7
1-2-3
1
2-3-4
4
[root@localhost /home/Sudley]#
[root@localhost /home/Sudley]#rr=
[root@localhost /home/Sudley]#echo ${rr:?qq};echo $?
-bash: rr: qq
[root@localhost /home/Sudley]#echo $?
1
[root@localhost /home/Sudley]#rr=111
[root@localhost /home/Sudley]#echo ${rr:?qq};echo $?
111
0
[root@localhost /home/Sudley]#echo ${rr:+qq}
qq
[root@localhost /home/Sudley]#
[root@localhost /home/Sudley]#echo $TEST
1234
[root@localhost /home/Sudley]#echo ${TEST:0:2}
12
[root@localhost /home/Sudley]#echo ${TEST:2:1}
3
[root@localhost /home/Sudley]#echo ${TEST:2}
34
Tips:在这里使用${}把参数名称包裹起来了,这样起到界定参数名称范围的作用
[root@localhost /home/Sudley]#r=123
[root@localhost /home/Sudley]#echo $r
123
[root@localhost /home/Sudley]#echo $rr
[root@localhost /home/Sudley]#echo ${r}r
123r
[root@localhost /home/Sudley]#
实战:
比如我们可以直接用dirname或者basename来分别获取一个文件的目录和文件名,这里换个方式,通过%和#实现
[root@localhost /home/Sudley]#cat test.sh
#!/bin/bash
file="/usr/local/qq/vchat.txt"
file_dir=$(dirname ${file})
file_name=$(basename ${file})
file_dir_1=${file%/*}
file_name_1=${file##*/}
echo $file_dir
echo $file_dir_1
echo $file_name
echo $file_name_1
[root@localhost /home/Sudley]#sh test.sh
/usr/local/qq
/usr/local/qq
vchat.txt
vchat.txt
[root@localhost /home/Sudley]#