shell函数使用,shell内置命令

目录

简介

完成特定功能的代码片段

在shell中定义函数可以用代码模块化,便于复用代码

函数必须先定义才可以使用

函数格式

传参 $1 $2

变量 local

返回值 return $?

  • 方法1

        函数名(){
                函数要实现的功能代码
        }
    
  • 方法2

        function 函数名(){
                函数要实现的功能代码    
        }
    

实例讲解

shell1.sh

阶乘

#!/usr/bin/bash
#! /bin/bash
#! /bin/env bash 
factorial(){
factorial=1
#下面是c风格的写法
for((i=1;i<=$sum;i++))
do
    factoral=${$factorial * $i}

    echo "$sum 的阶乘: $factorial"
done


#执行函数
factorial
#或者
#函数里面的位置变量是这个函数的,不是整个脚本的,需要在执行的时候连接起来
factorial=1
#for((i=1;i<=$1;i++))
#for((i=1;i<=$1;i++))
#也可以这样写
for i in `seq $1`
do
    #factoral=${$factorial * $i}
        #或者这样写
        #let factoral*=*$i
        let factoral=$factoral*$i
    echo "$1 的阶乘: $factorial"
done
#执行函数时,调用了脚本的$1,函数的$1
factorial $1
#执行函数时,调用了脚本的$2,函数的$1,以此类推
factorial $2
}


shell1.sh

提示用户输入个值,然后返回

#!/usr/bin/bash
#! /bin/bash
#! /bin/env bash 
fun2(){
        read -p "enter number: " num
        let 2*num

}
#函数的返回值是函数的最后一条命令执行的结果的返回值
fun2
echo "return $?" #返回0
#------------------------------#
fun2(){
        read -p "enter number: " num
        return $[2*$num] #小于等于255

}
#函数的返回值是函数的最后一条命令执行的结果的返回值
fun2
#echo "return $?" #返回0,shell返回值的大小不能超过255,会有错误的结果
#
#------------------------------#
#返回大于255的数
fun2(){
        read -p "enter number: " num
        echo $[2*$num] #小于等于255

}
#函数的返回值是函数的最后一条命令执行的结果的返回值
result=`fun2`
echo "return $result" #函数的输出

shell2.sh 函数参数使用

#!/bin/bash

if [ $# -ne 3]; then
        echo "usage: `basename $0` pa1 pa2 pa3"
        exit
fi
fun3(){
        echo "$(($1*$2*$3))"

}
result=`fun3 $1 $2 $3`
echo "resule: $result"

shell3.sh 函数参数使用数组

#!/bin/bash
#脚本执行所有参数
#或者for i in $* 或"$@"
for i
do
        let num+=$i
done
echo $num


num =(1,2,3)
echo "${num[@]}"

array(){
        farcty=1        #全局变量,函数外边可以使用
        local farcty2=1        #局部变量
        
        for i in "$@" #获得所有参数,或者$* 或者 for i in ${num[*]}
        do
                #farcty*=$i
                farcty=$[farcty*$i]
        done
}

#array ${num[@]} #数组所有参数
array ${num[*]} #数组所有参数


shell4.sh 函数参数使用数组,返回数组

函数接收位置参数 $1 $2…$n

*函数接收数组变量 $* 或者 $@*

*** 参数个数 $# ***

*函数将接收到的所有参数赋值给数组 array=($*)*

#!/bin/bash
#脚本执行所有参数
#或者for i in $* 或"$@"

num =(1,2,3)
num2 =(1,2,3)
echo "${num[@]}"

array(){
        echo "all: $*"
        farcty=1        #全局变量,函数外边可以使用
        local farcty3=()       #局部变量
        local farcty2=1        #局部变量
        local newarray=(`echo $*`) #创建新数组,或者newarray=($*)
        for((i=0;i<$#;i++))     # $#接收参数的个数
        do
                outarry[$i]=$[ ${newarray[$i]} *5 ]
                #或者outarry[$i]=$(( ${newarray[$i]} *5 ))
        done
        
        echo "${outarray[*]}"
}
#函数通过 一下两种方式传所有
#array ${num[@]} #数组所有参数
#array ${num[*]} #数组所有参数
result=`array ${num[*]}`

echo "{get $result[*]}"




#——————————————————————————————————————#

num =(1,2,3)
array(){
       
        #for((i=0;i<$#;i++))     # $#接收参数的个数
        local i
        local j
        local out=()
        for i in $*    # 也可以这样写 
                       #  for i 相当于 for i in $*
                       #do
                       #
                       #done
                       #
        do
                out[j++]=$[$i*5]
        done
        
        echo "${out[*]}"
}
#函数通过 一下两种方式传所有
#array ${num[@]} #数组所有参数
#array ${num[*]} #数组所有参数
result=`array ${num[*]}`        #在子shell中执行

echo "get ${result[*]}"




#——————————————————————————————————————————————————#

函数的内置命令

返回一个真值 * break,continue exit

#!/usr/bin/bash
for i in {A..D}
do
        echo -n $i      #不换行
        for j in {1...9}
        do
                if [ $j -eq 5 ];then
                        break 2  #跳几层 #空行可用continue跳出 只作用于循环
                fi

                echo -n $j   #不换行
        done
        echo #换行
done

  • shift使用

执行以下脚本 shell.sh 1 2 3

#!/usr/bin/bash
#for i in
while [ $# -ne 0 ]
do
        let sum+=$i
        shift 1 #位置参数向左移动一位
done
echo "sum: $sum"
#!/usr/bin/bash
#for i in
while [ $# -ne 0 ]
do
        useradd $1
        echo "$1 create "
        shift 1 #位置参数向左移动一位
done
echo "sum: $sum"