shell应用编程-简单实例

#!/bin/bash

 

#Mini通讯录程序 

#Shell语言实现功能简单的通讯录程序

#功能

#   1、新增个人通讯信息

#   2、查看所有通讯信息

#   3、提供两种方法查找某个人通讯信息

#       1)按名字查找

#       2)模糊查找

#   下面两种功能只在按名字查找条件下才能进行

#   4、修改找查到的个人通讯信息

#   5、删除找查到的个人通讯信息

#使用说明按提示一步一步的选择进行操作

#Author: Lzy   Time:2011-4-26

 

#全局变量

menu_choice=""   

 

#主菜单函数定义        

set_menu_choice(){

    clear                              #清屏

    echo "          Mini Address Book"

    echo " l) List Book"

    echo " a) Add new"

    echo " f) Find"

    echo " q) Quit"

    echo

    echo -n "funtion choice: "

    read menu_choice

    return

}

 

#待用户确认 确认返回0 否则返回1

sure_or_not(){

    echo -n "save?(yes or not): "

    while :

    do

        read X

        case $X in

            y|yes) return 0;;         #返回真

            n|not) return 1;;

            *) echo "please enter yes/y not/n";;

        esac

    done

}

 

#新增个人信息

add_new(){

    echo -n "Name: "

    read name

    echo -n "Phone number: "

    read number

    echo -n "QQ: "

    read qq

    echo                               #换行

    temp="${name%" "} ${number%" "} ${qq%" "}" #删除多余的空格符

    if  sure_or_not                   #等待用户确认

    then

        echo $temp >> ".Address_Book"  #信息保存          

    fi     

}

 

#更改个人信息实现函数 信息更新返回0 否则返回1

updata_new(){

    echo -n "Name: "

    read name

    echo -n "Phone number: "

    read number

    echo -n "QQ: "

    read qq

    echo                               #换行

    temp="${name%" "} ${number%" "} ${qq%" "}" #删除多余的空格符

    if  sure_or_not                   #等待用户确认

    then

        echo $temp >> ".Address_Book~" #信息保存  

        return 0

    fi     

    return 1

}

 

#创建通讯录文件

create_book(){

    if [ ! -e .Address_Book ]            #判断文件是否存在

    then      

        echo "Name    P_number   QQ" > .Address_Book      #文件信息的格式

    fi

}

 

#修改信息

update_book(){

    echo "modification record "

    echo " 1) change"

    echo " 2) delete"

    echo " q) quit"

    echo -n "select: "

    while :

    do

        read X

        case $X in

            1)                              #修改信息

                #其他人信息保存到另一个文件

                grep -"^${name%" "}" .Address_Book  >  .Address_Book~            

                if updata_new ;then          #信息修改之后并且确认保存

                    rm -rf .Address_Book

                    mv .Address_Book~ .Address_Book

                else

                    rm -rf .Address_Book~

                fi

                return 0 ;;                   #退出

               

            2)                              #删除信息

                grep -"^${name%" "}" .Address_Book  >  .Address_Book~

                rm -rf .Address_Book

                mv .Address_Book~ .Address_Book

                return 0 ;;

               

            q) return ;;         

            *) echo -n "try again: " ;;        

        esac

    done

}

 

#按名字查找

find_name(){

    echo -n "enter find anme: "

    read name

    spack=`grep "^${name%" "}" .Address_Book`   #在通信录文件中查找名字为name的个人信息 

    if [ -z "$spack" ] ; then                   #判断有无相关信息

        echo "no informtion"

        sleep 2

        return

    else

        echo $spack

        read

        update_book                               #修改信息

    fi

}

 

#提供两种查找方式 1按名字查找 2模糊查找

find_person(){   

    echo

    echo " 1) according to name find"

    echo " 2) fuzzy find"

    echo " q) quit"

    echo -n " find ways: "

    while true

    do

        read X

        case $X in

            1)

                find_name                     #按名字查找

                return ;;

            2)

                echo -n "enter find information: "

                read name

                grep "${name%" "}" .Address_Book   #模糊查找

                read

                return ;;

               

            q) return ;;

            *) echo "try again"

        esac

    done  

}

 

create_book                           #创建通讯录文件

while true

do

    set_menu_choice               #显示主菜单

    case ${menu_choice} in

      l|L)

        cat    .Address_Book         #查看通讯录信息

        read  ;;                   #任意键退出    

      a)

        add_new ;;

      f)

        find_person ;;       

      q)      

        clear

        exit 0 ;;

      *)

        echo -n "entered incorrectly, please retry "

        sleep 3 ;;                 #错误提示显示3s

     esac

done

exit 0                             #结束终止

 




FROM:  http://blog.chinaunix.net/uid-24219701-id-267440.html

Shell脚本高级编程教程,希望对你有所帮助。 Example 10-23. Using continue N in an actual task: 1 # Albert Reiner gives an example of how to use "continue N": 2 # --------------------------------------------------------- 3 4 # Suppose I have a large number of jobs that need to be run, with 5 #+ any data that is to be treated in files of a given name pattern in a 6 #+ directory. There are several machines that access this directory, and 7 #+ I want to distribute the work over these different boxen. Then I 8 #+ usually nohup something like the following on every box: 9 10 while true 11 do 12 for n in .iso.* 13 do 14 [ "$n" = ".iso.opts" ] && continue 15 beta=${n#.iso.} 16 [ -r .Iso.$beta ] && continue 17 [ -r .lock.$beta ] && sleep 10 && continue 18 lockfile -r0 .lock.$beta || continue 19 echo -n "$beta: " `date` 20 run-isotherm $beta 21 date 22 ls -alF .Iso.$beta 23 [ -r .Iso.$beta ] && rm -f .lock.$beta 24 continue 2 25 done 26 break 27 done 28 29 # The details, in particular the sleep N, are particular to my 30 #+ application, but the general pattern is: 31 32 while true 33 do 34 for job in {pattern} 35 do 36 {job already done or running} && continue 37 {mark job as running, do job, mark job as done} 38 continue 2 39 done 40 break # Or something like `sleep 600' to avoid termination. 41 done 42 43 # This way the script will stop only when there are no more jobs to do 44 #+ (including jobs that were added during runtime). Through the use 45 #+ of appropriate lockfiles it can be run on several machines 46 #+ concurrently without duplication of calculations [which run a couple 47 #+ of hours in my case, so I really want to avoid this]. Also, as search 48 #+ always starts again from the beginning, one can encode priorities in 49 #+ the file names. Of course, one could also do this without `continue 2', 50 #+ but then one would have to actually check whether or not some job 51 #+ was done (so that we should immediately look for the next job) or not 52 #+ (in which case we terminate or sleep for a long time before checking 53 #+ for a new job).
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值