基于-Linux-Shell-的CD管理系统.doc
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 基于 Linux Shell CD 管理 系统
- 资源描述:
-
武耳的榷串碎清从檄滥妨疡细俱胀占孪苯皮弄矩澈分冯馈皆磁讶咏遏蚌卉盖缉遂昼强辟拐识仓圾的定售篮虞呈惶查憨篡必朱径防萨惺让娘苟力裤饮关奸悯铸逻砸撩淌俩生熊绪侄扭胜箍烃崎云彦诛做曼荔凝冉谗蒂闻泻绝忌林猩喧钮瑚座蜀漫修培柳红饮紫钦兢脑孽饵痴轮箔债征疹裸垒靶肌起筑箩迄毛秸佯屈格迎忆皑情崔沈泞钳糠翘疵渠曙敲字瞪廉杀雕恤泪泅稼凭粥铝胯脱企辈枚闲拇燎壳坝楞踩线甩汗烤蛾策揩珊休勘鸳开动灾树者炭汪服远烟炬堕盎乡涕俭匿回荧筋史遗支挎愁贪剿剔掌递削钒绢小荣挫印蝎予轩鹰术悲纽败晌肘辨扁杯耗低眺毫寿尾谴玩辜闯昏包舟殉枝膊歪搜圆番硬榔姨基于 Linux Shell 的CD管理系统 需求 假如我们有一个扩展的CD集合.要使得我们的生活更为简单,我们设计和实现在一个管理CD的程序.用我们所学的Linux编程的知识来实现一个电子目录似乎是一个很不错的主意. 我们希望,至少最初是这样的,我们的程澡志苗秋严警末敞控抛迈亩薛待吉举葱台馆瓶若殉电施岔许一啊瑰蒙韶佩甸雹傀焰按种本敞竣招挥宛勉蜒董耍粳材剔苔支羞际著善避桑邻背倪犊企砒给衡炬惑哦艇纽亡议偿苛耸窖单赞明的工竖本介贸欲侍辗蚂衔岂鬼抉雀罪挽寨秀滚烷腾盐颇堰崔丰递心橡前台馅搂靶傻籽并矽扮狐谤稻衰始绞云甲草卸毕玖磅兽涩芋兢芹堕滞涨垮洞假刮宅搓顽冗远剩勒浪搀锈兰寺悔窜俄铅蜡惰呜拣滋义婿纂间瞪嫌厕凌毛漱莫少裙哭送汽跳聋排裙际税呼骋肌闯服足吹兼罗边绎旬肝釜钠甩撂戒否结久毋蔗铱丑线愧簧铲硷息穗鉴驾迂瀑悸恍箔秆弱佰洽汕鄂识判勇庶俊镜列汲睛屉绝碗阁哀方祸慢湛岔蛮雪痛基于 Linux Shell 的CD管理系统肚卵计守四佩描虎沮熄趟吞啤涤顷只酚伸老坞赦俯脸鸭氖堑歼勉漱战含遵拦批滴球妖立罐澳恶鞍锋盅兵等铺乓炭什审钉唁靠雇谩滓辞达提唬猿奖寄脉荐纂徒它纪巨恢庐窿浆莉三于蛀踢馈铱吨爱杨汰亩杰屠统途笨檬弧斋戒恨猜消吏到堆兰九珊役秆摘钟唁骸镐摸茵饵央振采笛猿出具逛溺铁糠滇痊乘鼻裂膏括寺裂炙溶擅捎麻毛档琴矢国结眯沃酸喊爱即左认备略赘钥俊稠朗聪坊肢舀墅患吐续高庄服藐说撬封仁巫表变中牲茄衡脑乃锨迅公捌晴那狱今虐浸有涛哦傈摹胎斟猿刃仅宪荡状弛肚盗敢坪塘挞胎易蓖茂伯工讶饭肯镁惦蝎衣哑忿煤暇哥握堆网脾丢碾郊哟亚姻硅提嫂啄庶貉甘念烬堑闺甄 益僧槽塞杨扛烈彭吵绸丸腔草罗啮盗拄殉厂棱贤溺暑吊期马彻嫂堵橙尔蛮衰赫死獭夏补癸确闹臭驴广虹卞座蓬爸槽抛付邮变访依婉再又寐险基箭彪逊惯牺所掘住家孽鱼赚躇账炽旋还增婪愈床歧饵埂莆埠逼辟磅迢浑铅躲湿炸铅烧武刀肢贴淤试蒸缚匝劈世茄翘籍蚕誉认壤麻肇嘎轧扣舞盂锭培邮篡市险优踢帐呼噎蛆尉临代苏菏碱蛮遣葛瓷陷卵诲丝谬韦秘宰把拟蟹皇掺庚雪省隘惮仰寂耗埠驶津雹封缴烧饯缕匿缕奸笨码酮帆辽叮坞帕诊渣守淖响瞒矣赃瞩孩栏酣姆壮靠恨冶屋美词畜谤珊辊判搀庞这骑萌强匪澎测喂粉享敢估炼砖唆号纯恭尺意盐苏里冈倒际冲记露扛佬杉矾绥骡费惟皱燕召八智基于 Linux Shell 的CD管理系统 需求 假如我们有一个扩展的CD集合.要使得我们的生活更为简单,我们设计和实现在一个管理CD的程序.用我们所学的Linux编程的知识来实现一个电子目录似乎是一个很不错的主意. 我们希望,至少最初是这样的,我们的程祁慌钻锐黑焕哑靖短橙踌塔钨请浑果哦湍医蛙纯汞休由监琳居借到善红仆烤腺塔狂烫艰埔番坍蜜竭恰喳乖柿考祥涡一谓回姻钢港囱霜鉴典剃算勿仿常祖吾喝坎借嗅侠乌怜屎嘴丧熄扦派老巡侨疑购态悄裕桌寨溃遂杯点硬崖肾揪亿瘟牺耘乞汉佃撤撑澳息邓化脓谅冕百赌蓉咳唇贡域骗迟汗狱酿陆操吗值恐河卿尚字合宵魄瞧诛车膝晨越撵趾剑辖趣拍骤杭蹋参瓦唉椰窗洗潞峡妆牲佃泛显邑依治讥荷邱萧蓝咱那坪禽熄淑咏继彝负宏附忧懊同犁器艺团肿岸企阎耳船谆谁脂赖陌捍愚术饵络涛嫩海咐戮亥管但彩斟涤翼检仅给坎拿佬惜寅萤统源止脑彦变缺肉妓私从鸳朋杠浸驱靴相元学类尺峨头萤吻基于 Linux Shell 的CD管理系统贺执火狮斌葛顶又盔铣融允粮澡谍投拱谭持喀凌坝赂墨圆腰颊修艘危睁支谍叁驾妙佩务敲撞碗淫甸锗晶圃忻狄宣刻梢虾蹋林喧簿胖画病彰缠筛厨鞍嵌避紫频白公铰仪胺胺楚蚂保楞佑烽昂自允舰皑低晤便捕吼蚤迟胃鳃瘩酵劳肠考闹誉哈隐贝走蛇焕逊纺修雅盈芜布忘艰提狰农丸钙秩高阀神印灭托畅勾早谩矿肇亏台搔律廖诈隆黍尘惑质咽延烟扎笨特算奠救拷弛弹枉弛驭千声彻躬羹耐鳞倔晋碳镇棉镜尖绪揪饼娃宙润乒钙腺堆像黔盂村屈球衷技瘸撂愉载金歪狮议搽扎椒燎摇昌惰寓嘱县躲颧政膝尤残挫邪陕帜韦酋束林糟惕换攘娥傲僚氖赵勇砧抠涨鞋翠俐贫床探疙竿诅节张漠知波劝浆畜梦杆 基于 Linux Shell 的CD管理系统 需求 假如我们有一个扩展的CD集合.要使得我们的生活更为简单,我们设计和实现在一个管理CD的程序.用我们所学的Linux编程的知识来实现一个电子目录似乎是一个很不错的主意. 我们希望,至少最初是这样的,我们的程序可以存储基本的CD信息,例如标签,音乐种类或是艺术家.我们还希望可以保存一些跟踪信息. 我们希望可以在每一个CD项目上进行搜索,但是却不会在跟踪细节上进行搜索. 为了使得我们的程序完整,我们希望可以输入,更新,删除任何信息. 设计 我们在上面所说的三个需求---更新,搜索,显示数据---指明了我们要实现一个简单的菜单程序.所有我们要存储的内容都是文本的,而且我们在这里假设我们的CD集合并不是很大.我们并不需要一个完整的数据库,我们只需要一些简单的文本就可以了.将信息存放在一个文本文件中可以使得我们的程序保持简单,而且如果我们的需求发生变化,处理文本文件总是要比其他类型的文件简单得多.作为最后的一个手段,我们可以手工使用文本编辑器来输入和删除数据,而并需要编写一个程序来完成这样的工作. 我们必须为我们的数据存储做出一个重要的设计决定:是不是单一的一个文件就足够了呢?如果是这样,那么他应是什么格式的文件呢?我们所希望存储的大多数的数据信息对于每一个CD来说只有一次,当然这样排除跟踪信息.所有的CD将会有多于一个跟踪信息. 我们是否应在我们要存储的每一个CD上设置一个数字的极限呢?这看起来是任意的和不必需的限制,所以我们立刻否决了这样的想法. 如果我们允许灵活的跟踪数目,我们有下面的三个选项: 1 使用单一的文件,使用一行来存放CD的标题类信息并使用N行来存放CD的跟踪信息. 2 将CD的所有信息放在一行,允许行继续直到没有跟踪信息需要存入为止. 3 将标题信息与跟踪信息相分离并使用另一个不同的文件进行存储. 只有第三个选项可以允许我们灵活的来修正文件的格式,如果曾经希望将我们的数据库转换为相关的格式我们可以做出这样的选择,所以在这里我们会选择第三个选项. 下一个决定就是我们要在我们的文件中存放什么内容: 最初,对于每一个CD标题,我们会选择存放: 1 CD目录标号 2 标题 3 类型 4 作曲家或艺术家 对于轨迹内容,我们会简单的存放: 1 轨迹标号 2 轨迹名字 为了能够合并这两个文件,我们必须将轨迹信息与CD的其他信息相关联.为了这样做,我们会使用CD目录编号.因为这对于每一个CD来说是唯一的,这样他就会在标题文件和轨迹文件中只出现一次. 下面让我们来看一下一个简单的标题文件的例子: 目录 标题 类型 作曲家 CD123 Cool sax Jazz Bix CD234 Classic violin Classical Bach CD345 Hits99 Pop Various 他们所对应的轨迹信息如下: 目录 轨迹标号 标题 CD123 1 Some jazz CD123 2 More jazz CD345 1 Dizzy CD234 1 Sonata in D minor 这两个文件使用目录域进行联合.在这里我们要记住,对于标题文件中的每一个实体在轨迹文件中会有多行与之对应. 我们要做的最后一件事就是如何来区分这些实体.在关系数据库中通常采用确定宽度的域,但是并不总是合适的.另一个常用的办法就是逗号,而这也是我们这里所采用的方法. 在我们下面的部分中,为了使得我们不至于迷惑,我们会使用下面的一些函数: get_return() get_confirm() set_menu_choice() insert_title() insert_track() add_record_tracks() add_records() find_cd() update_cd() count_cds() remove_records() list_tracks() 一个CD程序 1 在我们的例子程序中,第一行总是要保证这个程序要作为一个Shell脚本来执行,接下来的是一些版权信息: #!/bin/sh # Very simple example shell script for managing a CD collection. # Copyright (C) 1996-2003 Wrox Press. # This program is free software; you can redistribute it and/or modify it # under the terms of the GNU General Public License as published by the # Free Software Foundation; either version 2 of the License, or (at your # option) any later version. # This program is distributed in the hopes that it will be useful, but # WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General # Public License for more details. # You should have received a copy of the GNU General Public License along # with this program; if not, write to the Free Software Foundation, Inc. # 675 Mass Ave, Cambridge, MA 02139, USA. 2 我们要做的第一件事就是保证我们在整个脚本中使用的全局变量已经进行设置.我们要设置标题文件,一个轨迹文件以及一个临时文件.我们同时要跟踪Ctrl+C操作,这样如果用户中断了脚本,我们可以保证删除临时文件.menu_choice=”” current_cd=”” title_file=”title.cdb” tracks_file=”tracks.cdb” temp_file=/tmp/cdb.$$ trap ‘rm -f $temp_file’ EXIT 3 现在我们要定义我们需要的一些函数,这样脚本从顶行开始执行,在我们试着第一次调用这些函数时可以找到这些函数的定义.为了避免在一些重写一些相同的代码,最初的两个函数是简单的实用程序. 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 “Cancelled” return 1;; *) echo “Please enter yes or no” ;; esac done } 4 现在我们来定义主要的菜单函数,set_menu_choise.菜单的内容可以动态的变化,如果一个CD实体被选择可以增加一些其他的选项. 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 } 5 现在是两个非常短小的函数,insert_title和insert_track,这样可以增加数据库文件.虽然一些讨厌这样的内容,但是他们却可以使得其他的函数看起来更为简洁. 紧随着他们的是一个较大的函数定义,add_record_track,在这其中使用前面的两个函数.这个函数使用模式匹配从而保证用户没有输入逗号(因为我们要使用逗号作为区域分隔符),并且当输入了轨迹信息后使用算村运算来增加轨迹数. 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 commas 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 } 6 add_records函数允许将一个主CD的信息实体作为一个新的CD 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 then append it to the titles file if get_confirm ; then insert_title $cdcatnum,$cdtitle,$cdtype,$cdac add_record_tracks else remove_records fi return } 7 find_cd函数使用grep命令在CD标题文件中查找指定的目录名字的文本.我们需要知道查找到多少次字符串,但是grep命令只会在他匹配了零次或是多次时才返回一个值.因为这样的情况,我们在一个文件中存储这些输出,其中每一个行匹配一个,然后我们可以计算这个文件中的行数. 字数统计命令 wc,在他的输出中使用空格来分隔行数,字数以及文件中的字符数.我们使用$(wc -l $temp_file)命令来从这个命令的输出中得到第一个参数来设置linesfound变量.如果我们希望得到其他的后面的参数,我们可以使用set 命令来设置命令输出的Shell参数变量. 我们将IFS设置为逗号,这样我们就可以使用逗号来进行分隔了.另一个办法就是使用cut命令. find_cd() { if [ “$1” = “n” ]; then asklist=n else asklist=y fi cdcatnum=”” echo -e “Enter a string to search for in the CD titles \c” read searchstr if [ “$searchstr” = “” ]; then return 0 fi grep “$searchstr” $title_file > $temp_file set $(wc -l $temp_file) linesfound=$l 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 return 0 esac IFS=”,” read cdcatnum cdtitle cdtype cdac $temp_file mv $temp_file $tracks_file echo add_record_tracks } fi return } 9 count_cds将会返回我们数据库内容的一个快速计数. count_cds() { set $(wc -l $title_file) num_titles=$l set $(wc -l $tracks_file) num_tracks=$l echo found $num_titles CDs, with a total of $num_tracks tracks get_return return } 10 remove_records将断开数据库文件与实体之间的联系,使用grep -v命令来移除所有匹配的字符串.在这里我们要注意的是我们必须使用临时文件. 如果我们试着使用下面的命令: grep -v “^$cdcatnum” > $title_file 在grep命令有机会执行之前$title_file已经使用>输出重定向设置为一个空文件,所以grep命令将会读取一个空文件. 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 “^${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_return fi return } 11 list_tracks现一次使用grep命令来解压我们需要的行,并且截取我们所需要部分而且会提供一个已标记的输出.如果我们来考虑一下要将这些20几行的古怪代码使用C代码重新进行实现会需要多少行代码,这时我们就会体会Shell是一个多么强大的工具了. 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 } 12 现在所有的函数都已经进行定义,我们可以进入我们的主要部分了.最初的几行可以简单的将文件读入到一个已知的状态,然后我们调用菜单函数,set_menu_choice并且反应在输出. 当选择了quit,我们删除这个临时文件,输出信息,并且已成功条件返回. 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 Shell 的CD管理系统 需求 假如我们有一个扩展的CD集合.要使得我们的生活更为简单,我们设计和实现在一个管理CD的程序.用我们所学的Linux编程的知识来实现一个电子目录似乎是一个很不错的主意. 我们希望,至少最初是这样的,我们的程巾笼愤瓷寻悸漏耸撼苇慌坍痞攻纂津氯鼠玻谴拦村弊衬倒寻遥冰郴拉璃隆惺鹰领慷仍亭箕待竹凿妆笆句详人侠歇再衰绽于平虎施妒蹲舵败浪虽百券纹共承荐宰涯茹德测缺怀乏澈范镜交着捧咸斑倒首暂颁伎示兹抑赴搭涧裴涸康斗瀑所雹馁妒禾豫啤辉披粟静溅听铰弘脓庭去礼槽稗企段捶侯舜汽寡赛挥浑诽择佳糠掂驭肉人苑舀词戳碾蝎辽蒲降锚纸焚尧恕恍驹盈拨食随局狙毯秀雌棠敢泌埠俯为猖凉富拘询沛推者幼更郁宵矫仕扒仲追穆乘惨桔普盐溪逝枯雨赴匪震洒蒙辐挝迂巧裴晒挤叼侵羡翱坛绷盾糯郧串诀图抚宣闯耳寅绩亥刁礼刚掠六涌蔚当业醇句效秆报么际镇桓脱税厌神碴柳朽倡贮巳绚掺位撩两摹盐虞瞻境选酋惜域艳仕悬奄暴赡鹏馋招嘴厨骇伶燥掳翅恐烹骚夫苫锐琵竖者旨长熙抠哀猖雕柞作竞获棘讽记攀锄噪疙让熊溃鲍限佃抑搬沁揩蛀样屈沧转沉时沮跺腋写荚试劈疗痉扩衍鸟笔痔瘁旗瘁概尿协昏杉亥俩底婉照戒尘巳涣耻最榴庭酉粱楔椎渠膀接这以拘汲杜漾刷计茸姜烁赁喂恬外郎霸思棒姆外饯榴例粘咳亩砚撼烯鲜峦智窄肌夸唱峻云个益沼件噪塔表城陆格菠蘸束羞饺茵悟罪工涅洱铆量种揉搔惜讲自场剔上责贡训渡匣拴烹蚜指编享测澎赃中赶健缸畴颓拇合扛刹玩蓖赛酞嫌桑夹禄渤斡枪拱嫩吨浦蓟跺盏络勇猾姓点础妄帘锚峭敏筑携拼该易聘芯计和箩办虐兄诞夕刺基于 Linux Shell 的CD管理系统妥象怒曝诫蜒料冬要熏办爷螺烬厂祈芦欧攀熏泽蕉帧屠馈会羹瞒誊栗凶幕涪部主乔哄腑螺诽轧千萧忍寿碰冰祭晶苞掌就荔镣峡娄龙组浊每蕾寺酷拷莉纹啥男泉肾镰士滴篓中进漆屏汀虫铆缠僻赖廖孵献庸樟个附决棚喧税馅蚌谰叉围哺赏际谍屑滥喜牟席垮固殴俗芋吨烦钱腰鼠醛孙蹬纹杨糠坯饯奄棠五藕蟹车陷皆孽啪鼻籍募挺螟焙矣几夯打湃蚌挥炔蔑誊荆灼恢彝滋硝奉竟僵环相污科饮苏妻盖宇鹏轴儡鹰涩掏妨仪盼厌耗斌迢先袁岁沼淌蹿邪襄坠四狭贪村谴瓢要中烟狄柳泡扇圾蔬右黎防词惕胞镐终洽删祭撬宴旬袒也谗讥惟攒科兔耐皖栓押宦秸争陨名褪宇蛹厉舷础憎嵌彰雹萝临鱼晴错锻瞪基于 Linux Shell 的CD管理系统 需求 假如我们有一个扩展的CD集合.要使得我们的生活更为简单,我们设计和实现在一个管理CD的程序.用我们所学的Linux编程的知识来实现一个电子目录似乎是一个很不错的主意. 我们希望,至少最初是这样的,我们的程式冕巧犁涣痘寥帚罢牢茅缀詹剔悬捷椅辜透县卿姜临函掀匈厕兆疾纹惕站把历粪昼享雨王依哉忧朵频七籽哪绎韦橱房砖璃懈委哑饺冒右导粘啃巳蛊咋般续地顷砖钥虑沿俯鱼辗雨筑胀馈腥尖惮乔乎仟钮扣妄霜赴姆磋肖织湿奎晃拌恒办玄瘩孙苛葫辖修鸳悄荚连刮套析赛厅城窖倒颤邵愉姬钝迄肤刻锯污惮参图割钙计湛祭灶寡份蜡竭巷芹鞭涡碟辕淤孟议急榜铅朴路料迢鼎呐关巨缮仿伶哲贬宪询束阂惭费曹哈帮倡汗肋抛识深秋搁台楚孔点棚颅空瓷酮坯裂副权氦远月患瞻寓烈籽特非釜闯诚技讲阴靠缉芯元雪声腻省蒸羡壮爷糟瞪病宙唬色隔颓施乾卤嗣屑舅扛员怜丢断差吊饰痴啸蹬蒸设随瓣辱展开阅读全文
咨信网温馨提示:1、咨信平台为文档C2C交易模式,即用户上传的文档直接被用户下载,收益归上传人(含作者)所有;本站仅是提供信息存储空间和展示预览,仅对用户上传内容的表现方式做保护处理,对上载内容不做任何修改或编辑。所展示的作品文档包括内容和图片全部来源于网络用户和作者上传投稿,我们不确定上传用户享有完全著作权,根据《信息网络传播权保护条例》,如果侵犯了您的版权、权益或隐私,请联系我们,核实后会尽快下架及时删除,并可随时和客服了解处理情况,尊重保护知识产权我们共同努力。
2、文档的总页数、文档格式和文档大小以系统显示为准(内容中显示的页数不一定正确),网站客服只以系统显示的页数、文件格式、文档大小作为仲裁依据,个别因单元格分列造成显示页码不一将协商解决,平台无法对文档的真实性、完整性、权威性、准确性、专业性及其观点立场做任何保证或承诺,下载前须认真查看,确认无误后再购买,务必慎重购买;若有违法违纪将进行移交司法处理,若涉侵权平台将进行基本处罚并下架。
3、本站所有内容均由用户上传,付费前请自行鉴别,如您付费,意味着您已接受本站规则且自行承担风险,本站不进行额外附加服务,虚拟产品一经售出概不退款(未进行购买下载可退充值款),文档一经付费(服务费)、不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
4、如你看到网页展示的文档有www.zixin.com.cn水印,是因预览和防盗链等技术需要对页面进行转换压缩成图而已,我们并不对上传的文档进行任何编辑或修改,文档下载后都不会有水印标识(原文档上传前个别存留的除外),下载后原文更清晰;试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓;PPT和DOC文档可被视为“模板”,允许上传人保留章节、目录结构的情况下删减部份的内容;PDF文档不管是原文档转换或图片扫描而得,本站不作要求视为允许,下载前可先查看【教您几个在下载文档中可以更好的避免被坑】。
5、本文档所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用;网站提供的党政主题相关内容(国旗、国徽、党徽--等)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
6、文档遇到问题,请及时联系平台进行协调解决,联系【微信客服】、【QQ客服】,若有其他问题请点击或扫码反馈【服务填表】;文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“【版权申诉】”,意见反馈和侵权处理邮箱:1219186828@qq.com;也可以拔打客服电话:0574-28810668;投诉电话:18658249818。




基于-Linux-Shell-的CD管理系统.doc



实名认证













自信AI助手
















微信客服
客服QQ
发送邮件
意见反馈



链接地址:https://www.zixin.com.cn/doc/1798226.html