ICode9

精准搜索请尝试: 精确搜索
首页 > 系统相关> 文章详细

Shell函数

2021-07-26 10:03:00  阅读:189  来源: 互联网

标签:bin Shell 函数 sum1 echo 命令 bash


Shell函数

 

 

 

               一、Shell函数定义

               二、函数返回值

               三、函数传参

               四、函数变量的作用范围

               五、递归

                 1)阶乘

                 2)递归目录

               六、创建函数库

 

 

 

 

一、Shell函数定义

将命令序列按格式写在一起。

可方便重复使用命令序列。

格式

(1)

function 函数名{
命令序列 }

(2)

函数名() {
命令序列 }

二、函数返回值

return表示退出函数并返回一个退出值,脚本中可以用$?变量显示该值。

使用原则

①函数一结束就取返回值,因为$?变量只返回执行的最后一条命令的退出状态码。

②退出状态码必须是0-255,超出时值将为除以256取余。

命令

#!/bin/bash

function a {
  read -p "请输入一个值:" b
  return $[$b * 2]

}
a
echo $?

例:

 

使用echo输出,值没有范围

命令

#!/bin/bash

a() {
  read -p "请输入一个值:" b
  echo $[$b * 2]

}
result=$(a)
echo $result

例:

 

三、函数传参

命令

#!/bin/bash

sum1() {
  sum=$[$1+$2]
  echo $sum

}
read -p "输入第一个值:" a
read -p "输入第二个值:" b

sum1 $a $b
res=$(sum1)
echo $res

例:

 

命令

#!/bin/bash

sum1() {
  sum=$[$1 + $2]
  echo $sum

}
read -p "输入第一个参数:" a
read -p "输入第二个参数:" b
sum1 $a $b

例:

 

命令

#!/bin/bash

sum1() {
  sum=$[$1 + $2]
  echo $sum

}
sum1 $1 $2

例:

 

四、函数变量的作用范围

函数在Shell脚本中仅在当前Shell环境中有效。

Shell脚本中变量默认全局有效。

将变量限定在函数内部使用local命令。

命令

#!/bin/bash

a() {
  i=8
  echo $i
}
i=9
a
echo $i

例:

 

将变量限定在函数内部

命令

#!/bin/bash

a() {
  local i
  i=8
  echo $i
}
i=9
a
echo $i

例:

 

五、递归

递归:函数调用自己本身的函数。

1)阶乘

命令

#!/bin/bash

a() {
  if [ $1 -eq 1 ];then
    echo 1
  else
    local b=$[$1 - 1]
    local c=$(a $b)
    echo $[$1 * $c]
  fi

}
read -p "请输入一个阶乘数字:" n
c=$(a $n)
echo "$n 的输出结果:" $c

例:

 

2)递归目录

命令

#!/bin/bash

a() {
  for i in $(ls $1)
  do
    if [ -d "$1/$i" ];then
      echo "$2$i"
      a "$1/$i" " $2"
  else
      if [ ! -x "$1/$i" ];then
         echo "$2$i"
      fi
    fi
  done
}
############ main #############
OLDIFS=$IFS
IFS=$IFS':'

for b in $PATH
do
  echo $b
  a "$b" " "
done

例:

 

六、创建函数库

命令

[root@localhost ~]# vim 111.sh
#!/bin/bash

fact() {
  if [ $1 -eq 1 ];then
    echo 1
  else
  local temp=$[$1 - 1]
  local result=$(fact $temp)
  echo $[$1 * $result]
  fi
}

jiafa() {
  echo $[$1 + $2]
}
jianfa() {
  echo $[$1 - $2]
}
chengfa() {
  echo $[$1 * $2]
}
chufa() {
  if [ $2 -ne 0 ];then
    echo $[$1 / $2]
  else
    echo "除数不能为0"
  fi
}

 

[root@localhost ~]# vim 222.sh
#!/bin/bash
. 111.sh

v1=$1
v2=$2

res1=$(jiafa $v1 $v2)
res2=$(jianfa $v1 $v2)
res3=$(chengfa $v1 $v2)
res4=$(chufa $v1 $v2)
res5=$(fact $v1)

echo "加法的结果为:$res1"
echo "减法的结果为:$res2"
echo "乘法的结果为:$res3"
echo "除法的结果为:$res4"
echo "$1 的阶乘结果为:$res5"

例:

 

 

 

标签:bin,Shell,函数,sum1,echo,命令,bash
来源: https://www.cnblogs.com/BokeGai/p/15034360.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有