编写脚本程序时,你经常需要捕获一条命令的执行结果,并把它用在shell脚本程序中。也就时你想要执行一条命令,并把命令的输出放在一个变量中。
如果想要把命令的结果放到一个变量中,你可以按通常的方法来给它赋值。
例如:
whoisthere=$(who)
echo $(whoisthere)
1.算数扩展
$(( ))命令/expr命令
例如:
#!/bin/bash
x=0
while [ "$x" -ne 10 ];do
echo $x
x=$(( $x+1 )) #这与x=$(...)命令不同,$(( ))用于算数替换,而$( )用于命令的执行和获取输出。
done
exit
2.参数扩展
为了保护变量名中类似$i部分的扩展,你需要把i放到话括号中,例如:
#!/bin/bash
for i in 1 2
do
mysecret_program ${i}_tmp #mysecter_program 是用来处理1_tmp 2_tmp文件的程序
done
#!/bin/bash
for i in 1 2 ; do
echo "$i"_tmp #输出1_tmp 2_tmp 字符串
touch ${i}_tmp #建立 1_tmp 2_tmp 文件,此处用“ ”代替{ }同样可行
echo $(who) #执行 who 命令
echo $(who) > ${i}_tmp #执行who命令 并将结果重定向于 1_tmp 2_tmp 文件,此处用“ ”代替{ }同样可行
who>>"$i"_tmp #
done
常见的参数扩展方法:
{param:-default}:如果param为空,就把它设置为default的值
{#param}:给出param的长度
{param%word}:从param的尾部开始删除与word匹配的最小部分,然后返回剩余部分
{param%%word}:从param的尾部开始删除与word匹配的最长部分,然后返回剩余部分
{param#word}:从param的头部开始删除与word匹配的最小部分,然后返回剩余部分
{param##word}:从param的头部开始删除与word匹配的最长部分,然后返回剩余部分
例如:
unset foo
echo $(foo:-bar)
foo=fud
echo $(foo:-bar)
foo=/usr/bin/x11/startx
echo $(foo#*/)
echo $(foo##*/)
bar=/usr/local/etc/local/networks
echo $(bar%local*)
echo $(bar%%local*)