其他高档言语都有函数的感念,当然shell编程也有这个概念,当写一个比较大型的shell程序的时分,假如没有函数,则会处处都是重复的代码。当然也能够调用其他脚本,可是速度会比较慢。所以函数是必不可少而且十分重要的一个东西。
界说函数的格局
function_name(){…}
比如:
//~ fun_s
show(){
echo show $*
}
echo $*
echo after function
show c d
echo $*
exit 0
/////////////////////////////
$./fun_s a b
成果是
a b
after function
c d
a b
从上面的比如能够看出,当脚本调用函数的时分,脚本程序的方位参数会被替换成函数的方位参数,而且函数调用完毕后复原。
return:
//~ return_s
#!/bin/bash
first(){
echo is return
}
second(){
echo before return
return 0
echo after return
}
return_value=$(first)
echo $return_value
secondecho return 0 echo return other
exit 0
//////////////////////////////////////
输出
is return
before return
return 0
该比如阐明能够捕获函数内echo的字符串,如echo $(first) , 函数在return后不会再履行下面的句子。
secondecho return 0 echo return other 该句的输出为 return 0。这儿有人可能会和C言语混杂,由于在C言语里0表明的是false。而这儿的0表明函数履行成功,能够理解为true,所以会输出return 0。
指令
break,continue 和c言语根本类似
echo 了解一点即可echo -n 输出没有换行。
eval:
比如:
//~ eval_s
#!/bin/bash
var1=abcd
var2=var1
eval var3=\$$var2
echo $var3
exit 0
///////////////////////////
eval相当于一个额定的$,它给出一个变量值的值,如比如里先是$var2使var3变成\$var1,又var1=abcd,所以var3变为abcd,接连解析了两次变量。
export:
看下面两个比如能够很好的阐明export的效果。
//~ export1_s
#!/bin/bash
var1=this is var1
var2=this is var2
export var2
./export2_s
exit 0
///////////////////////////
//~ export2_s
#!/bin/bash
echo $var1
echo $var2
exit 0
/////////////////////////
输出:
this is var2
输出成果阐明var1为空而var2却有值,这正是export起的效果,把var2变成了一个环境变量。
再看个比如:
#!/bin/bash
echo $var1
echo $var2
echo $var3
exit 0
//////////////////////////
//~ set-a_s
#!/bin/bash
set -a
var1=var1
var2=var2
var3=var3
./set-a2_s
exit 0
//////////////////////////
//~ set-a2_s
输出:
var1
var2
var3
set -a的效果便是把它之后声明的一切变量都export
printf:
和C言语里的printf用法很类似的一个指令,运用十分便利。
set:
//~ set_s
#!/bin/bash
fun1()
{
echo a b c d
}
set $(fun1)
echo $1
echo $(date)
set $(date)
echo $1
exit 0
///////////////////////
输出: a 2008年 03月 06日 周四 03:57:55 CST 2008年
date的输出是几个由空格分隔的值,set的效果能分隔出每个域。
shift:
便是让$2变$1,$3变$2,依此类推。
trap:
十分有用的一个指令,用于指定接受到信号后进行的动作,体系界说了十分多的信号类型,用trap -l指令能够检查一切的信号。
常见的几个信号有:
INT(2) 中止,按下ctrl+c组合键引发的
QUIT(3) 退出,按下ctrl+\引发
比如:
//~ trap_s
#!/bin/bash
trap var=2 INT
echo please enter ctrl+c
var=1
while [ $var = 1 ]
do
echo in while
sleep 1
done
exit 0
/////////////////////////
这个比如在我按下ctrl+c后改变了var的值,所以跳出循环,程序完毕。
shell下的程序设计十分强壮,你能够用它做出许多小工具,让你的运用linux体系愈加流通。shell还有十分多的功用文中没有说到,需求我们发现问题后再自己去处理。