您的位置:首页 > 运维架构 > Shell

shell函数

2015-12-16 23:48 495 查看
1. 输入一行字符并赋值给一个变量:

linux15:~/opt # read -p "" a

123

linux:~/opt # echo $a

123

linux:~/opt # read -p "" abc

afsd2321qewr

linux:~/opt # echo $abc

afsd2321qewr

linux:~/opt #

2 函数用法:

[~/shell/function]# cat factorial.sh

#!/bin/bash

function factorial

{

factorial=1

for (( i=1;i <= $1;i++ ))

do

factorial=$[ $factorial * $i ]

done

echo $1的阶乘是:$factorial

}

echo '程序名':$0,用于求阶乘

factorial $1

[~/shell/function]# ./factorial.sh 10

程序名:./factorial.sh,用于求阶乘

10的阶乘是:3628800

执行shell命令时, $0 存储 shell命令 的第一个参数(命令名), $1 存储shell命令的第二个参数。

3. 函数返回码是指函数最后一条命令的状态码,可以用于函数返回值。

linux-xingyuncao15:~/opt # more return.sh

#!/bin/bash

function fun1 {

read -p "enter a: " a

echo -n "print 2a: "

return $[ $a * 2 ]

}

fun1

echo "return value $?"

linux-xingyuncao15:~/opt # ./return.sh

enter a: 24

print 2a: return value 48

linux-xingyuncao15:~/opt # ./return.sh

enter a: 200

print 2a: return value 144

linux-xingyuncao15:~/opt # ./return.sh

enter a: asdfad

print 2a: return value 0

linux-xingyuncao15:~/opt #

由于shell状态码最大是255,所以当返回值大于255时会出错。

4. 为了返回大于255的整数,可以用函数输出到变量:

linux-xingyuncao15:~/opt # more return2.sh

#!/bin/bash

function fun2 {

read -p "enter a: " a

echo -n "print 2a: "

echo $[ $a * 2 ]

}

result=`fun2`

echo "return value $result"

linux-xingyuncao15:~/opt #

linux-xingyuncao15:~/opt #

linux-xingyuncao15:~/opt # ./return2.sh

enter a: 502398348737461

return value print 2a: 1004796697474922

linux-xingyuncao15:~/opt # ./return2.sh

enter a: 12asdf

./return2.sh: line 5: 12asdf: value too great for base (error token is "12asdf")

return value print 2a:

linux-xingyuncao15:~/opt # ./return2.sh

enter a: 2a

./return2.sh: line 5: 2a: value too great for base (error token is "2a")

return value print 2a:

linux-xingyuncao15:~/opt # ./return2.sh

enter a: adsf12

return value print 2a: 0

linux-xingyuncao15:~/opt # ./return2.sh

enter a: 2.5

./return2.sh: line 5: 2.5 * 2 : syntax error: invalid arithmetic operator (error token is ".5 * 2 ")

return value print 2a:

linux-xingyuncao15:~/opt #

linux-xingyuncao15:~/opt # more return2.sh

#!/bin/bash

function fun2 {

read -p "enter a: " a

echo -n "print 2a: "

echo $[ $a * 2 ]

}

result=`fun2`

echo "return value $result"

linux-xingyuncao15:~/opt #

linux-xingyuncao15:~/opt # sh -x return2.sh

++ fun2

++ read -p 'enter a: ' a

enter a: 2345

++ echo -n 'print 2a: '

++ echo 4690

+ result='print 2a: 4690'

+ echo 'return value print 2a: 4690'

return value print 2a: 4690

linux-xingyuncao15:~/opt # ./return2.sh

enter a: 2345

return value print 2a: 4690

linux-xingyuncao15:~/opt #
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: