shell函数

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 #


  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值