2021-02-07

shell脚本编程学习第十天

J、传入至少三个数字参数到脚本file,并计算出最大,最小,平均值。需要判断传入的数字是否足够,否则输出警告信息。平均值保留两位小数。
如执行./file 3 4 6 5,输出结果如下:
max number is:6
min number is:3
average is:4.50

方法1:

#!/bash/bin
if [[ $# -le 2 ]];then
    echo " paramters  must be at least 3"
    exit 1
fi
max=$1
min=$1
sum=$1
count=$#
shift
while [ $# -gt 0 ] 
do
    ((sum+=$1))
    if [[ $1 -gt $max ]];then
        max=$1
    fi

    if [[ $1 -le $min ]];then
        min=$1
    fi
    shift
done
ave=`echo "scale=2;$sum/$count"| bc`
echo "max = $max"
echo "min = $min"
echo "ave = $ave"

参数的特殊处理:
$# : 返回参数的个数
$* : 返回所有参数, 以 “$1 $2 … $n” 的形式输出参数;
$@: 返回所有参数,以 “$1” “$2” … " $n" 的形式输出参数;
$?: 函数返回值0成功,非0 失败;
$0 : 返回函数名字。

shift: 命令左移,后面可以加参数 shift 3,参数默认是1(shift 1),移动后,$1 实际上是 $ 2。每执行一次,变量的个数($#)减。
exit: exit 0 表示正常退出; exit 1 表示异常退出。
bc: 精度计算,scale=N 设置保留N位小数。

方法二:

#!/bin/bash
if [[ $# -le 2 ]];then
    echo " paramters  must be at least 3"
    exit 1
fi

echo "$@" | awk ' //这里的单引号,不要起另一行
BEGIN{ RS=" " } // 这个大括号不要起下一行,要在begin后面
{
    sum+=$0
}
NR==1 {
    max=$1
    min=$1
    next
}
$1>max { max=$1 }
$1<min { min=$1 }
END{   // 这个大括号不要起下一行,要在end后面
printf "max number is:%s\n",max
printf "min number is:%s\n",min
printf "average is:%.2f\n",sum/NR
}'

**awk:**继续学习点。
awk ’ BEGIN{ statements } statements2 END{ statements } '(只能用单引号)
工作方式

  1. 执行begin中语句块;
  2. 从文件或stdin中读入一行,然后执行statements2,重复这个过程,直到文件全部被读取完毕;
  3. 执行end语句块;

NR:表示记录的数量,在执行过程中对应当前的行号;(行)
NF:表示字段数量,在执行过程中对应当前的字段数;(列)
RS:记录分隔符,默认情况下是\n,可以自定义分隔符; (-F是字段分隔符,读取每一行时默认按照空格分割字段变量,我理解他俩的区别是RS将一行分为好几行,F是将一行分为好几部分)。
$0:这个变量包含执行过程中当前行的文本内容;
print:打印时会自动换行;
next:显示下一条消息;

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值