函数基础+练习

函数

shell函数:
定义:
1、将命令序列按照格式写到一起。格式指的是函数的固定格式。两种格式。
for i in {}
do
命令序列
done
**作用:**1、方便重复使用。函数库,集中在一起随时可以穿参调用
2、大工程分割为若干个小的功能模块,提高代码的可读性

函数的格式

function 命名 {

   命令序列

}


命名(){

    命令序列
    return 
}

return 的作用:只能写在函数内部,目的是从函数的内部获得返回值,用来判断是否继续执行下一个脚本。
return 之后 echo $? 不在判断函数的执行结果,只是一个函数内部的返回值,在使用return传返回码的时候,默认0是成功,非0都是失败
$?的返回码可以自定义但是范围在0-255
function aaa  {
  read -p "输入一个数字:" num
  if [ $num -eq $num ] &> /dev/null
  then
   a=$(($num*2))
   return 0
   else
    echo "输入错误"
    return  1
    fi
}
aaa   #调用函数

if [ $? -eq  0 ]
then
echo "ok"
else
exit
fi
#作用范围
abc () {

  local  a=5
  local  b=6
   c=10

}
a=8
b=9
c=11
abc
echo $a
echo $b
echo $c
#在函数内部定义的全部变量,外部不能改变内部的全局变量
#加local之后,就是函数内部的变量,而不是全局变量,外部赋值会替换内部的变量值
#阶乘  4的阶乘  
jiecheng () {

   if [ $1 -eq 1 ]
   then
    echo 1 
   else
    local temp=$(($1-1))
    local reult=$(jiecheng $temp)
    echo $[$1 * $reult] 
  fi
}
read -p "请输入一个整数:" num
result=$(jiecheng $num)
#定义一个结果
echo "$num 的阶乘:$result"
#递归目录
function mulu {
   for f in $( ls $1 )
   do
     if [ -d "$1/$f" ]
     then
     echo "$2$f"
# 不查看目录
     mulu "$1/$f" " $2 "
     else
     echo " $2$f"
     fi
   done
}
mulu "/etc/" " "

作业:

1、既能支持小数也能支持整数运算? 函数库hanshuku diaoyong

#函数库,函数库只包含定义的函数,由另外的一个脚本传入参数来调用我们定义的函数。
vim hanshuku.sh
#jiafa () {
# echo " $1 + $2 " | bc
#}
jiafa_xiaoshu () {
echo " scale=2 ; $1 + $2  "  | bc
}
jianfa_xiaoshu () {
echo " scale=2 ; $1 - $2 " | bc
}
chengfa_xiaoshu () {
echo " scale=2;  $1 * $2 " | bc
}
chufa_xiaoshu () {
  if [ $2 == 0 ];then
    echo "除数不能为0!"
  else
    echo " scale=2; $1 / $2 " | bc
  fi
}


vim diaoyong.sh
. /opt/hanshu/hanshuku.sh
read -p "输入第一个数:" num1
read -p "输入第二个数:" num2
sum=`jiafa_xiaoshu $num1 $num2`
jf=`jianfa_xiaoshu $num1 $num2`
cf=`chengfa_xiaoshu $num1 $num2`
chufa=`chufa_xiaoshu $num1 $num2`
echo "加法结果:$sum"
echo "减法结果:$jf"
echo "乘法结果:$cf"
echo "除法结果:$chufa"

2、#上午我们递归文件的代码,实现了递归出所有目录下的文件
#所有文件,把后缀名是.txt的分件复制到/opt/dec当中。

function mulu {

   for f in $( ls $1 )
   do
     if [ -d "$1/$f" ]
     then
     echo "$2$f"
# 不查看目录
     mulu "$1/$f" " $2 "
     else
     echo " $2$f"
     case $f in
     *.txt)
      cp "$1/$f" /opt/dec
     ;;
#     *)
     esac
     fi
   done

}
mulu "/opt" "  "

[root@test3 hanshu]# sh muludigui.sh
[root@test3 hanshu]# ll /opt/dec/
总用量 4
-rw-r--r--. 1 root root 8 6月  18 14:47 users.txt

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

代码要你命

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值