shell CD唱片应用程序
2012-04-30 00:13
239 查看
出自《Linnux 程序设计》第二章,自已一个个地敲出来的,结论就是少了几个s没出来效果
#!/bin/sh 和 #!/bin/bash 是有差别的
开始直接敲入的是前者,老是输出一些 -e,表示不懂
#!/bin/sh 和 #!/bin/bash 是有差别的
开始直接敲入的是前者,老是输出一些 -e,表示不懂
#!/bin/bash # very simple example shell script for managing a CD collection # Copyright (C) 1996-2007 Wiley Publishing Inc menu_choice="" current_cd="" title_file="title_cdb" tracks_file="tracks.cdb" temp_file=/tmp/cdb.$$ trap 'rm -f $tmp_file' EXIT get_return(){ echo -e "Press return \c" read x return 0 } get_confirm(){ echo -e "Are you sure? \c" while true do read x case "$x" in y | yes | Y | Yes | YES ) return 0;; n | no | N | NO | No ) echo echo "Canceled" return 1;; *) echo "Please enter yes or no";; esac done } set_menu_choice(){ clear echo "Options :-" echo echo " a) Add new CD" echo " f) find CD" echo " c) Count the CDs and tracks in the catalog" if [ "$cdcatnum" != "" ]; then echo " l) List tracks on $cdtitle" echo " r) remove $cdtitle" echo " u) update track information for $cdtitle" fi echo " q) QUIT" echo echo -e "Please enter choice then press return \c" read menu_choice return } insert_title(){ echo $* >> $title_file return } insert_track(){ echo $* >> $tracks_file return } add_record_tracks(){ echo "Enter track information for this CD" echo "When no more tracks enter q" cdtrack=1 cdttitle="" while [ "$cdttitle" != "q" ] do echo -e "Track $cdtrack,track title ? \c" read tmp cdttitle=${tmp%%,*} if [ "$tmp" != "$cdttitle" ];then echo "Sorry,no command allowed" continue; fi if [ -n "$cdttitle" ] ; then if [ "$cdttitle" != "q" ] ; then insert_track $cdcatnum,$cdtrack,$cdttitle fi else cdtrack=$((cdtrack-1)) fi cdtrack=$((cdtrack+1)) done } add_records(){ # Prompt for the initial information echo -e "Enter catalog name \c" read tmp cdcatnum=${tmp%%,*} echo -e "Enter title \c" read tmp cdtitle=${tmp%%,*} echo -e "Enter type \c" read tmp cdtype=${tmp%%,*} echo -e "Enter artist/composer \c" read tmp cdac=${tmp%%,*} # Check that they want to enter the information echo About to add new entry echo "$cdcatnum $cdtitle $cdtype $cdac" # If confirmed the appen it to the titles file if get_confirm ; then insert_title $cdcatnum,$cdtitle,$cdtype,$cdac add_record_tracks else remove_records fi return } find_cd(){ if [ "$1" = "n" ];then asklist=n else asklist=y fi cacatnum="" echo -e "Enter a string to search for in the CD title \c" read searchstr if [ "$searchstr" = "" ];then return 0 fi grep "$searchstr" $title_file > $temp_file set $(wc -l $temp_file) linesfound=$1 case "$linesfound" in 0) echo "Sorry, nothing found" get_return return 0 ;; 1) ;; 2) echo "Sorry,not unique" echo "found the following" cat $temp_file get_return retrun 0 esac IFS="," read cdcatnum cdtitle cdtype cdac < $temp_file IFS=" " if [ -z "$cdcatnum" ];then echo "Sorry.could not exact catalog field from $temp_file" get_return return 0 fi echo echo Catalog number $cdcatnum echo Title: $cdtitle echo Type: $cdtype echo Artist/Composer: $cdac echo get_return if [ "$asklist" = "y" ]; then echo -e "View tracks for this CD ?\c" read x if [ "$x" = "y" ];then echo list_tracks echo fi fi return -1 } update_cd(){ if [ -z "$cdcatnum" ]; then echo "You must select a CD first" find_cd n fi if [ -n "$cdcatnum" ]; then echo "Current tracks are :-" list_tracks echo echo "This will re-enter the tracks for $cdtitle" get_confirm && { grep -v "^${cdcatnum}," $tracks_file > $temp_file mv $temp_file $tracks_file echo add_record_tracks } fi return } count_cds(){ set $(wc -l $title_file) num_titles=$1 set $(wc -l $tracks_file) num_tracks=$1 echo found $num_titles CDs,with a total of $num_tracks tracks get_return return } remove_records(){ if [ -z "$cdcatnum" ]; then echo you must Select a CD first find_cd n fi if [ -n "$cdcatnum" ]; then echo "You are about to delete $cdtitle" get_confirm && { grep -v "^S{cdcatnum}," $title_file > $temp_file mv $temp_file $title_file grep -v "^${cdcatnum}," $tracks_file > $temp_file mv $temp_file $tracks_file cdcatnum="" echo Entry removed } get_retrun fi return } list_tracks(){ if [ "$cdcatnum" = "" ]; then echo no CD selected yet return else grep "^${cdcatnum}," $tracks_file > $temp_file num_tracks=$(wc -l $temp_file) if [ "$num_tracks" = "0" ]; then echo no tracks found For $cdtitle else { echo echo "$cdtitle :-" echo cut -f 2- -d ,$temp_file echo } | ${PAGER:-more} fi fi get_return return } rm -f $temp_file if [ ! -f $title_file ];then touch $title_file fi if [ ! -f $tracks_file ];then touch $tracks_file fi # Now the application proper clear echo echo echo "Mini CD manager" sleep 1 quit=n while [ "$quit" != "y" ]; do set_menu_choice case "$menu_choice" in a) add_records;; r) remove_records;; f) find_cd_y;; u) update_cd;; c) count_cds;; l) list_tracks;; b) echo more $title_file echo get_return;; q | Q ) quit=y;; *) echo "Sorry.choice not recognized";; esac done #Tidy up and leave rm -f $temp_file echo "Finished" exit 0
相关文章推荐
- 《Linux程序设计》第四版第二章 我的第一个shell程序:CD唱片应用程序
- Linux程序设计的CD唱片应用程序
- linux程序设计——CD唱片应用程序(第七章)
- 【CD唱片shell脚本实现】实现方法
- 启动和停止Java应用程序的Shell脚本
- 使用 shell 脚本创建好的图形应用程序
- 对话UNIX:使用shell脚本创建好的图形应用程序
- cd 命令写成shell
- c++中调用其他应用程序的方法(winexec shellexecute createprocess)
- 在Linux的应用程序里面调用shell
- Android应用程序如何调用shell脚本(一)
- Linux下如何实现shell多线程编程以提高应用程序的响应
- 在shell中向应用程序的socket发送信息
- SWT应用程序切换Shell中的Composite
- 父shell和子shell的区别,在shell脚本中要cd一个文件夹为什么要用父shell运行
- jenkins 通过shell启动java应用程序会随着job完成而被自动关闭的解决方法
- Linux 应用程序里面调用Shell
- java中调用adb shell 命令启动android应用程序
- Shell出现cd命令无法识别
- shell脚本中cd命令无效的解决方案