Linux——shell编程实战1
题目一:设计一个shell程序计算n的阶乘。要求:
(1)从命令行接收参数n;
(2)在程序开始后立即判断n的合法性,即是否有参数,若有是否为正整数,若非法请
给错误提示;
(3)最后输出计算的结果
#!/bin/bash
sum=1
if [ ! $1 ]
then echo "没有参数"
else
if (( $1<=0 ))
then echo "输入参数不合法"
else
for i in `seq 1 1 $1`
do
sum=$((sum*i))
done
echo $sum
fi
fi
说明:直接在sh … 后面传参数$1
题目二:打印当前内存总大小,使用了多少,使用了多少百分比
#!/bin/bash
arr=`free | awk '{print int($2)}'`
arr2=`free | awk '{print int($3)}'`
total=0
used=0
for i in $arr
do
echo $i
total=$(( total + $i ))
done
for i in $arr2
do
echo $i
used=$(( used + $i ))
done
j=`awk -v x=$used -v y=$total 'BEGIN{printf"%.2f\n",x/y*100}'`
echo "内存总大小 $total mb"
echo "使用了$used"
echo "占比 $j%"
说明:Linux中没有一个命令可以直接打印内存占用率。free仅能展示内存使用情况的大小,所以这里的关键是要计算浮点数
浮点数计算使用awk的函数功能:
j=`awk -v x=$used -v y=$total 'BEGIN{printf"%.2f\n",x/y*100}'`
题目三:shell中的选择排序
#!/bin/bash
echo "输入数组"
read -a arr
for (( i=0;i<${#arr[@]};i++ ))
{
for (( j=i+1;j<${#arr[@]};j++ )){
if (( ${arr[j]} < ${arr[i]} ))
then
t=${arr[i]}
arr[i]=${arr[j]}
arr[j]=$t
fi
}
}
echo ${arr[@]}
说明:和C++里差不多。主要注意C风格的for循环用的是双小括号