linux系列(十二):shell函数function、return的作用、function练习

7 函数

shell函数格式:没有返回值类型+参数列表
格式:[function] 函数名[()]{
        statement;
        [return 返回值;]
     }

7.1 函数中涉及的变量

function test1(){
   echo '$0='$0;# 获取执行命令:./function.sh
   echo '$*='$*;# 获取所有参数列表:2 3 4 5 6
   echo '$@='$@;# 获取所有参数列表:2 3 4 5 6
   echo '$#='$#;# 获取参数列表个数:5
   echo '$1='$1;# 获取第一个参数: 2
   echo '$2='$2;# 获取第二个参数: 3
   echo '$$='$$;# 获取进程id
}
test1 2 3 4 5 6;

7.2 练习

function add1(){
   sumab=$(($1+$2));
   return $sumab;
}
add1 3 4;
sum1=$?;#获取上一个命令的结果
echo "3+4="$sum1;


#遍历获取所有的参数
function test2(){
  geShu=1;
  for i in $*;do
      echo '第'$geShu'个参数的值是:'$i;
	  geShu=$((geShu+1));
  done;
}
test2 2 9 7 1 6;


#* 判断一个数是不是质数
function pdZhiShu(){
   if [ $1 -le 1 ]; then
        return 1;
   fi;
   for ((m=2;m<$1;m++));do
        if [ $(($1%m)) -eq 0 ];then
		      return 1;
		fi;
   done;
   return 0;#返回true/false不行
}
#调用
for ((n=0;n<=10;n++));do
   pdZhiShu $n;
   result=$?;
   if [ $result -eq 0 ];then
       echo $n'是质数';
   fi;
done;

#* 判断参数年参数月有多少天
function test3(){
    days=0;
    year=$1;month=$2;
	case $month in
	     4 | 6 | 9 | 11)
           days=30;;	
		 2)
           if [ $((year%4)) -eq 0 -a $((year%100)) -ne 0 -o $((year%400)) -eq 0 ];then
                  days=29;
           else
		          days=28;
           fi;;
         *)
           days=31;;
	esac;
	return $days;	     		   
}
for ((year=2000;year<=2020;year++));do
    for ((month=1;month<=12;month++));do
	      test3 $year $month;
          echo $year'年'$month'月有'$?'天!';		  
	done;
done;
#* 证明所有四位数进入黑洞的次数<=7 
function heiDong(){
   for ((n=1000;n<10000;n++));do
       if [ $((n%1111)) -eq 0 ];then
	       continue;
	   fi;
	   k=$n;
	   ciShu=0;
	   while [ $k -ne 6174 ];do
	       #获取各个位数的值
		   arr=($((k%10)) $((k/10%10)) $((k/100%10)) $((k/1000)));
		   #echo ${arr[*]};
		   #数组排序
		   for ((i=0;i<${#arr[*]}-1;i++));do
		        for ((j=i+1;j<${#arr[*]};j++));do
				      if [ ${arr[i]} -gt ${arr[j]} ];then
		                 temp=${arr[i]};arr[i]=${arr[j]};arr[j]=$temp;
					  fi;	 
		        done;
		   done;
		   #echo ${arr[*]};
		   maxArr=$((${arr[3]}*1000+${arr[2]}*100+${arr[1]}*10+${arr[0]}*1));
		   minArr=$((${arr[0]}*1000+${arr[1]}*100+${arr[2]}*10+${arr[3]}*1));
		   k=$((maxArr-minArr));
		   ciShu=$((ciShu+1));
	   done;
	   echo $n'经过'$ciShu'次运算后得到'$k;
   done;
}
#heiDong;


#* 斐波那契数列:写一个方法获取第n个数: 1 1 2 3 5 8 13 21
function fbnq1(){
   arg=$1;
   #使用数组
   arr=(1 1);
   for ((i=2;i<arg;i++));do
      arr[$i]=$((${arr[i-1]}+${arr[i-2]}));  
   done;
   echo ${arr[*]};
   #echo '${arr[arg-1]}'${arr[arg-1]}'---$((arg-1))'$((arg-1));
   resultFbnq=${arr[arg-1]};
}
for ((n=1;n<=20;n++));do
   fbnq1 $n;
   echo   '第'$n'个元素是:'$resultFbnq;
done;

7.3 注意return的作用

#探究result的返回值:return后面的值 不是返回值是状态码:从0到255
function test3(){
   return 1597;
}
test3;echo '1597='$?;

#设置返回值值的正确方式
function test4(){
   result4=$(($1+1));
}
test4 3;
echo '3+1='$result4;

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值