shell中的case语句与函数

1、选择分支case语句

和其他编程语言不一样的是,shell的选择分支语句为case in

语法

case $var in
	pattern1)
        command
        ;;					#;;相当于break
	pattern2)
		command
		;;
	pattern3)
		command
		;;
	*)						#default,不满足以上分支情况,默认执行*)下的语句
		command
		;;
esac

案例:

#!/bin/bash
printf "Input integer number: "
read num
case $num in
    1)
        echo "Monday"
        ;;					
    2)
        echo "Tuesday"
        ;;
    3)
        echo "Wednesday"
        ;;
    4)
        echo "Thursday"
        ;;
    5)
        echo "Friday"
        ;;
    6)
        echo "Saturday"
        ;;
    7)
        echo "Sunday"
        ;;
    *)
        echo "error"
esac

2、函数

(1)函数定义

语法

语法一:
函数名 () 
{
	代码块
	[return value]
}
语法二:
function 函数名 
{
	代码块
	[return value]
}

(2)函数调用

格式FunctionName parameter1 parameter2 parameterN

1️⃣脚本中调用

示例

#! /bin/bash
#----------------------------------------------
#   FileName      :function.sh
#   Author        :kerongw
#   Date          :2021年06月15日
#   Description   :
#----------------------------------------------

echo "123456789"

#函数定义,$1表示传递第一个参数,$2表示传递的第二个参数
function whobig
{
    if(($1>$2||$1==$2))
        then
            echo "$1 is big"
        else
            echo "$2 is big"
    fi
}

echo "调用函数"
                     
#调用函数并传递参数2 和 5
whobig 2 5

echo "函数调用结束"


在这里插入图片描述

2️⃣命令行中调用

脚本中的函数也可以在命令行中调用,不过要先以当前shell进程执行脚本后才可调用

source script.sh

FunctionName parameter1 parameter2 parameterN

示例:

#! /bin/bash
#----------------------------------------------
#   FileName      :function.sh
#   Author        :kerongw
#   Date          :2021年06月15日
#   Description   :
#----------------------------------------------
echo "函数定义前"

fun_test()
{
    echo "传递给函数的第一个参数为:$1"
    echo "传递给函数的第二个参数为:$2"
    echo "传递给函数的第三个参数为:$3"

}

echo "函数定义结束"

source命令可以在当前bash环境下读取并执行FileName中的命令,我们一般直接执行脚本的话是在后台另起一个shell进程执行我们的脚本。而使用source命令可以使当前的脚本直接在当前的shell中直接运行

在这里插入图片描述

(3)函数传参

给函数传参和给shell脚本传递参数相似,在函数内部参数都是用$n来接受的。除了$n外还有三个比较重要的变量

  • $#:可以获取传递参数的个数
  • $@$*:可以一次性获取所有参数。详情参见
function funtest
{
    echo "一共给函数传递了$#个参数"
    echo "参数是$*"
    echo "第一个参数是$1"
    echo "第一个参数是$2"
    echo "第一个参数是$3"
}

echo "函数调用开始"

funtest aa bb cc

echo "函数调用结束"

在这里插入图片描述

(4)函数返回值

shell中的返回值表示函数的退出状态。返回0表示成功,返回非0表示失败出错了

shell函数返回值只能介于0~255之间,0表示成功,非0表示失败,具体可自定义。若函数没有return 语句,则使用默认退出状态,即最后一条命令的退出状态。因此严禁的写法为return $?

#! /bin/bash
#----------------------------------------------
#   FileName      :return.sh
#   Author        :kerongw
#   Date          :2021年06月15日
#   Description   :
#----------------------------------------------

function fun_test1
{
    return $(($1+$2))
}

function fun_test2
{
    echo "command" > /dev/null
    return $?   #当函数没有返回值时,我们应该返回上一条命令的返回值
}

fun_test1 1 2
echo "fun_test1 return value is $?"
fun_test2
echo "fun_test2 return value is $?"

在这里插入图片描述

对于超过255或者其他类型的返回值,可以借助以下方式获取返回值

  • 借助全局变量,将返回结果赋值给全局变量
  • 在函数内部使用echo 、printf命令将结束输出,在函数外部使用$()或``捕获结果

①借助全局变量获取返回值

#! /bin/bash
#----------------------------------------------
#   FileName      :global.sh
#   Author        :kerongw
#   Date          :2021年06月15日
#   Description   :
#----------------------------------------------

sum=0

function getsum
{
    for ((i=$1;i<$2;i++))
    do
        ((sum=sum+$i))
    done
    return $?       #严谨起见无返回值时应该返回上一条命令的执行结果
}

sum=0       #调用之前对全局变量清零
getsum 1 10
echo "getsum 返回值sum=$sum"

sum=0       #调用函数之前对全局变量清零
getsum 1 100
echo "getsum 返回值sum=$sum"
~

在这里插入图片描述

②借助echo输出获取返回值

function getsum
{
    sum=0
    for ((i=$1;i<$2;i++))
    do
        ((sum=sum+$i))
    done
    echo $sum
    return $?       #严谨起见无返回值时应该返回上一条命令的执行结果
}

value1=`getsum 1 10`
value2=$(getsum 1 100)
echo "getsum 返回值value1=$value1"
echo "getsum 返回值value2=$value2"

在这里插入图片描述

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值