Shell脚本编程篇


#!/bin/bash
#斐波那契数列
#不要用递归,深度大于30就老火了。
function fun_test()
{
     if [ $1 -lt 3 ];then
    echo 1
    return
      fi
     sum1=1
     sum2=1
     let count=$1-2
     sum=0
     while [ $count -gt 0 ];do
    let count--
    let sum=sum1+sum2
    let sum1=sum2
    let sum2=sum
     done
     echo $sum
}
val=$(fun_test $1)
echo $val





#!/bin/bash
求输入的一串数字中的最大数,最小数以及平均数(保留2位小数)
Maxsum=$1
Minsum=$1
sum=$1
count=$#
shift 1
while [ $# -gt 0 ];do
    if [ $Maxsum -lt $1 ];then
    let Maxsum=$1
    fi
    if [ $Minsum -gt $1 ];then
    let Minsum=$1
    fi
    let sum+=$1
    shift
done
echo "Max::" "$Maxsum"
echo "Min::" "$Minsum"
val=`echo "scale=2;$sum/$count" | bc`
echo "pingjun::" "$val"





#!/bin/bash
#递归当前目录下面所有目录文件。
function fun_test()
{
    ls $1 | while read line
    do
        DIR="$1/$line"
        if [ -d $DIR ];then
        echo "dir: " "$DIR"
                fi
    [ -d $DIR ] &&
    {
        fun_test $DIR
    }
    done
}
fun_test .






//最好使用单引号,这更加符合标准,然后加上-E选项或者egrep。
.匹配任意一个字符,只要在行里面包含这个模式就会按该行展示。
[]匹配括号中的任意一个字符,[abc]就只能匹配a或者b或者c一个字符。
[-]在括号内表示范围,echo "test" | grep -E 'tes[a-z]'
[^]在括号里面的取相反的结果。
[[:alpha:]]匹配一个字母。
?匹配前面的单元一次或者零次。
+匹配它前面的单元一次或者多次。
*紧跟它前面的单元匹配零次或者多次。
{n}在-E选项中不需要使用\,表示前面这个单元重复n次,包括前面这个单元。
{n,m}重复前面单元n到m次,也包括前面这个单元。
{n,}重复前面这个单元至少n次。
{,n}重复前面这个单元最多n次。
上面这四个正则表达式都是闭包的。
^匹配行首的位置。
$匹配行未的位置。
<匹配单词开始的地方。
>匹配单词结束的地方。
<>匹配一个单词。
\b匹配单词开头或者结束的位置。
\B匹配非单词开始或者结束的位置。
^$匹配空行的位置。

相关内容