linuxshell 读书笔记五 (unix shell 第三版)


--简单说明 $parameter 是 ${parameter} 的一个简写方式
--前面也提到了 cp $file ${file}_1 把file变量中存的文件(假如名为x)复制一份 放在 x_1文件中
--参数传递的时候 超过9个参数就不能再用$10来接 而是用${10}

${para :- value} --如果变量para为空则显示value 否则显示 para
[xep@localhost ~]$ echo ${test:-555}
555

[xep@localhost ~]$ test=top
[xep@localhost ~]$ echo ${test:-iii}
top

${para := value} --如果变量para为空则把value赋予$para 否则无操作
[xep@localhost ~]$ echo $op

[xep@localhost ~]$ echo ${op:=oprater}
oprater
[xep@localhost ~]$ echo $op
oprater

${para :+ value} --如果para不为空则显示value 否则无操作
[xep@localhost ~]$ echo $op
oprater
[xep@localhost ~]$ echo ${op:+xp}
xp
[xep@localhost ~]$ echo $op
oprater

${para :? value} --当para存在且非空显示$para 否则报错
[xep@localhost ~]$ echo ${ooo:?xp}
ooo
[xep@localhost ~]$ set ooo=
[xep@localhost ~]$ echo $ooo
ooo
[xep@localhost ~]$  ooo=
[xep@localhost ~]$ echo $ooo

[xep@localhost ~]$ echo ${ooo:?xp}
-bash: ooo: xp

${para:offset:length} --从para中截取offset到length的个数 如果没输入length就从offset开始取到最后
[xep@localhost ~]$ echo $op
oprater
[xep@localhost ~]$ echo ${op:2,3}
ater
[xep@localhost ~]$ echo ${op:5}
er
[xep@localhost ~]$ echo $op
oprater

${para#pattern}  --从para左边(开始)最小匹配并删除pattern字符
${para##pattern} --从para左边(开始)最大匹配并删除pattern字符  --般与通配符一起使用
${para%pattern}  --从para右边(结尾)最小匹配并删除pattern字符
${para%%pattern} --从para右边(结尾)最大匹配并删除pattern字符  --般与通配符一起使用
[xep@localhost ~]$ var=testcase
[xep@localhost ~]$ echo $var
testcase
[xep@localhost ~]$ echo ${var%e}    --删除变量var结尾e
testcas
[xep@localhost ~]$ echo ${var}           --显示变量var
testcase
[xep@localhost ~]$ echo ${var%s*e}  --删除变量var结尾的s..e 最小匹配
testca
[xep@localhost ~]$ echo ${var%e*e}  --删除变量var结尾的e..e 最小匹配
t
[xep@localhost ~]$ echo ${var%%s*e} --删除变量var结尾的s..e 最大匹配
te
[xep@localhost ~]$ echo ${var#e}    --删除变量var开始的e    无匹配
testcase
[xep@localhost ~]$ echo ${var#?e}   --删除变量var第二个字符是e的前两个字符
stcase
[xep@localhost ~]$ echo ${var#*e}   --删除变量var从开始到第一个e为止的字符
stcase
[xep@localhost ~]$ echo ${var##*e}  --删除变量var中e之前的所有字符

[xep@localhost ~]$ echo ${var##?e}  --与 echo ${var#?e}相似
stcase
[xep@localhost ~]$ echo ${var#test} --删除变量var中的以test开始的字符
case


[xep@localhost ~]$ echo ${`ls -l`%%s*p}
-bash: ${`ls -l`%%s*p}: bad substitution
[xep@localhost ~]$ s="ls -l"; echo ${s%%s*p}
ls -l
[xep@localhost ~]$ s=`ls -l`;echo ${s%%s*p}
total 308 -rwxr-xr-x 1 xep xep 96 Oct 30 03:54 add_


${para/string/replace}                          --将para中的string替换成replace 替换一次
[xep@localhost ~]$ echo ${var/e/s}
tsstcase
[xep@localhost ~]$ echo ${var/tes/s}
stcase
${para//string/replace}                         --将para中的string替换成replace 全部替换
[xep@localhost ~]$ echo ${var//e/s}
tsstcass


--参数替换是很有用的 如
if [ ${file%.o} != $file ]
then
   echo "是以.o结尾的"
fi   

echo ${file##*/}  --相当于basename命令

[xep@localhost ~]$ echo ${#var}     --输出变量var中存的串长度
8




你可能感兴趣的:(linuxshell 读书笔记五 (unix shell 第三版))