CD唱片应用程序

清华大佬耗费三个月吐血整理的几百G的资源,免费分享!....>>>

#!/bin/bash
menu_choice=""
current_cd=""
title_file="title.cdb"
tracks_file="tracks.cdb"
temp_file=/tmp/cdb.$$
cdtrack=1
trap 'rm -f $temp_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 -e "\nCancelled"
				return 1;;
			*) 
				echo "Please enter yes or no";;
		esac
	done
}

set_menu_choice() {
	clear
	echo "Option :-"
	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
}

#向tracks数据文件添加数据
add_tracks() {
	echo "Enter track information for this CD"
	echo "When no more tracks enter q"
	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" ] && [ "$cdttitle" != "q" ]; then 
			echo "$cdcatnum,$cdtrack,$cdttitle" >> $tracks_file
			cdtrack=$((cdtrack+1))
		elif [ ! -n "$cdttitle" ]; then
			echo "You input kong"
			continue
		else
			return
		fi
	done
}

#向title数据文件添加数据
add_title() {
	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%%,*}
	
	echo "About to add new entry:"
	echo "$cdcatnum $cdtitle $cdtype $cdac"

	if get_confirm;  then
		echo "$cdcatnum $cdtitle $cdtype $cdac" >> $title_file
	fi
}


add_records() {
	add_title
	add_tracks
	return
}

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=$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
		return 0
	esac

	IFS=","
	read cdcatnum cdtitle cdtype cdac < $temp_file
	IFS=" "

	if [ -z "cdcatnum" ]; then
		echo "Sorry,could not ectract 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 && {
		 mv $temp_file $tracks_file
		 echo
		 add_record_tracks
		}
		fi
		return
}

count_cds() {
	set $(wc -l $title_file)
	num_titles=$1
	set $(wa -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 "^${cdcatnum}," $title_file > $temp_file
		 mv $temp_file $title_file
		 grep -v "^${cdcatnum}," $tracks_file > $temp_file
		 mv $temp_file $tracks_file
		 cdcatnum=""
		 echo "Enter removed"
		}
		get_return
	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
}

main() {
	rm -f $temp_file
	if [ ! -f $title_file ]; then
		touch $title_file
	fi

	if [ ! -f $tracks_file ]; then
		touch $tracks_file
	fi

	clear
	echo
	echo
	echo "CD manager"
	sleep 1

	quit=n
	while [ "$quit" != "y" ];
	do
		set_menu_choice
		case "$menu_choice" in
			a) add_records
			   echo "Out add!";;
			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

	rm -f $temp_file
	echo "Finished"
	exit 0
}

main