linux shell函数
上面的 show123.sh当中,每个输入结果one, two, three其实输出的内容都一样,可以使用function来简化!
function的语法如下所示:
function fname() { 程序段 }fname就是自定义的执行指令名称,程序段就是我们执行的内容了。
shell script的执行是由上而下,由左而右,function的定义一定放在在程序的最前面, 这样才能够在执行时被找到。
我们将show123.sh改写一下,自定义一个名为printit的函数:
[peter@study bin]$ vim show123-2.sh #!/bin/bash # Program: # Use function to repeat information. # History: # 2015/07/17 VBird First release PATH=/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin:~/bin export PATH function printit(){ echo -n "Your choice is " #加上-n可以不断行继续在同一行显示echo "This program will print your selection !" } case ${1} in "one") printit; echo ${1} | tr 'a-z' 'A-Z' # 将参数做大小写转换! ;; "two") printit; echo ${1} | tr 'a-z' 'A-Z' ;; "three") printit; echo ${1} | tr 'a-z' 'A-Z' ;; *) echo "Usage ${0} {one|two|three}" ;; esac函数名称printit ,在后续的程序段里面只要执行printit,shell script去执行function printit里面的几个程序段落!
如果某些程序代码一再地在script当中重复时,这个function可就重要的多,不但可以简化程序代码,而且可以模块化程序的设计!
建议使用vim的编辑器到/etc/init.d/目录下查阅一下文件, 自行追踪每个文件的执行情况,相信会更有心得!
function也是拥有内建变量的~他的内建变量与shell script很类似, 函数名称代表示$0,而后续接的变量也是以$1, $2...来取代
function fname() {
程序段
}
内的 $0, $1... 等等与 shell script 的 $0 是不同的。
以上面show123-2.sh来说,假如我下达:sh show123-2.sh one 这表示在 shell script内的$1 为"one"这个字符串。
但是在printit()内的$1则与这个one无关。
我们将上面的例子再次的改写一下,让你更清楚!
[peter@study bin]$ vim show123-3.sh #!/bin/bash # Program: # Use function to repeat information. # History: # 2015/07/17 VBird First release PATH=/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin:~/bin export PATH function printit(){ echo "Your choice is ${1}" # 这个 $1 必须要参考底下指令的下达 } echo "This program will print your selection !" case ${1} in "one") printit 1 #注意printit指令后面还有参数! ;; "two") printit 2 ;; "three") printit 3 ;; *) echo "Usage ${0} {one|two|three}" ;; esac如果输入 sh show123-3.sh one,会出现Your choice is 1,
因为程序段中写了printit 1, 那个1就会成为function中的$1。
initroot编辑整理,转载请注明www.initroot.com
100次点赞
100次阅读