shell函数

函数概述

将命令序列按格式写在一起,可方便重复使用命令序列

shell函数格式

【1】

function 函数名 {

命令序列

}

【2】

函数名(){

命令序列

}

 

 

函数返回值

1 函数内用 return 退出函数并返回函数值;函数外用 echo $?获取返回值

(退出状态码必须是0~255,超出值将除以256取余)

2 在函数内用echo输出值,在函数体外可用变量=$(函数名)获取函数返回值

函数传参

函数名 参数1 参数2 ....

 函数变量的作用范围

函数默认只能脚本内的shell环境有效(使用source执行脚本,也会影响当前shell环境)

脚本中的变量默认全局有效(即函数体内外都有效)

在函数体内执行local 变量,可将变量限定在函数体内部使用

#!/bin/bash
a () {

i=8        #定义函数内i=8
echo $i      输出$i

}



i=9          #函数体外赋值i=9
echo $i       输出 $i
a              执行函数

 不同变化

 

 

 

 递归阶乘

函数调用自己本身的函数

#!/bin/bash

cx () {
  for f in $(ls $1)
  do
    if [ -d "$1/$f" ]
    then
       echo "$2目录$f"
       cx "$1/$f"  "  $2"
#查询的是目录,就调用函数往下一层目录继续查看   
    else
       echo "$2文件$f"
    fi
  done



}
cx "/var/log" ""
#设置参数 $1是/var/log $2是空

 

例题:先mkdir -p /root/bin/aa/bb/cc/dd ; touch /root/bin/aa/bb/cc/dd/abc.txt,再输出环境变量PATH所包含的所有目录以及其中的子目录和所有不可执行文件

#D定义一个遍历PATH的环境变量的函数
list_path () {
IFSB=$IFS
IFS=$IFS':'
   for F in $PATH
   do
       echo $F
   done
   IFS=$IFSB
}

#定义一个递归函数
listf() {
  for F in $(ls $1)
  do
        if [ -d "$1/$F" ];then
           echo "$2$F"
        else
           if [ ! -x "$1/$F" ];then
              echo "$2$F"
           fi
         fi
  done
}
#######main####

folder=$(list_path)
for path in $folder
do



listf  "$path" ""

 

 

 将IP地址转换为二进制

#!/bin/bash
 
#定义一个将十进制数转换为二进制的函数
switch() {
    num=$1
    for i in {1..8}
    do
      a=$[num % 2]$a
      let num/=2
    done
      echo $a
}
 
#定义将分割IP地址的函数
 
spt() {
     ip=$1
     for i in {1..4}
     do
      NUM=${ip%%.*}
      ip=${ip#*.}
      result=$(switch NUM)
      echo -n $result.
    #结果不换行输出,并在每个结果后加“.”
    done
}
 
###main###
read -p "输入一个合法ip:" ipaddr
res=$(spt $ipaddr)
echo ${res%.*}
#输出结果删除最后一个“.”

 函数数据库

#将函数写入函数库中
jiafa() {
    echo $[$1 + $2]
}
 
jianfa() {
    echo $[$1 -$2]
}
 
chengfa() {
    echo $[$1 * $2]
}
 
chufa() {
   if [ $2 -eq 0 ];then
       echo "除数不可为0"
   else
       echo $[$1 / $2]
   fi
}

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值