初学Shell
最近一直在学习Shell,深感系统命令的博大精深,由其是管道和重定向更是惊叹不已。于是写了个小程序练练手:
1
#CD管理系统2
#!/bin/sh3
#==========================4
#定义全局变量5
#cdinfopath:CD基本信息存储路径6
#cdsongpath:CD歌曲存储文件路径7
#temppath:临时文件路径8
#pcdcode:CD代码9
#==========================10
cdinfopath="cdtfile.cdb"11
cdsongpath="cdfile.cdb"12
temppath="/tmp/cdb.$$"13
pcdcode=""14

15
trap 'rm -f $temppath echo " 用户中断程序,系统现在退出!sleep 5" ' EXIT16

17
show_help()18
{19
echo "暂时还没有帮助文档,请见谅!" 20
get_return 21
}22

23
get_return()24
{25
echo "请按任意键返回主菜单
."26
read x27
return 028
}29

30
get_confirm()31
{32
echo "你确定要执行操作?(y/n)"33
while true34
do35
read bResult36
case "$bResult" in37
Y | y ) return 0 ;;38
N | n ) return 1 ;;39
* ) 40
echo "输入有误,请重试!"41
esac42
done43
}44

45
#初始化46
init()47
{48
rm -rf $temppath49
if [ ! -f $cdinfopath ] ; then50
touch $cdinfopath51
fi52
if [ ! -f $cdsongpath ] ; then53
touch $cdsongpath54
fi55
56
}57
#插入CD基本信息58
insert_cd_basinfo()59
{60
echo $* >> $cdinfopath61
}62
#插入歌曲63
insert_cd_songs()64
{65
echo $* >> $cdsongpath66
}67
is_exist_cdcode()68
{69
local cdcode=$@70
grep "^${cdcode%%,}" "$cdinfopath" > $temppath71
set $(wc -l $temppath)72
num="$1"73
if [ "$num" -gt 0 ];then74
return 075
else76
return 177
fi78
}79

80
#添加歌曲81
add_songs()82
{83
local cdcode=$@84
local song=""85
local songnum=186
clear87
echo "添加CD$cdcode的歌曲:"88
echo "<<返回主菜单(q\\Q)"89
while true90
do91
echo "请输入第$songnum首歌曲名称:"92
read temp93
songname=${temp%%,}94
if [ -z "$songname" ] || [ "$temp" != "$songname" ];then95
echo "歌曲名称不能为空,且不能带有特殊符号逗号"96
else 97
if [ "$songname" != "q" ] && [ "$songname" != "Q" ];then98
songname=${songname%%,}99
song="$cdcode,$songnum,$songname"100
insert_cd_songs "$song"101
songnum=$(($songnum+1))102
else103
break104
fi105
fi 106
done107
if [ "$songnum" -gt 1 ];then108
return 0109
else110
return 1111
fi112
}113
#列出CD114
list_cd()115
{116
local cdcode=$@117
local cdname=""118
local cdauthor=""119
grep "^${cdcode%%,}" "$cdinfopath" > $temppath120
IFS=","121
read cdcode cdname cdauthor < "$temppath"122
IFS=" "123
echo "CD代码:$cdcode, CD名称:$cdname, CD作者:$cdauthor"124
grep "^${cdcode%%,}" "$cdsongpath" > $temppath125
echo "歌曲列表:"126
cut -f 2- -s -d , "$temppath"127
get_return128
}129
#删除CD130
rmove_cd()131
{132
local cdcode=$@133
grep -v "^${cdcode%%,}" "$cdinfopath" > $temppath134
mv -f $temppath $cdinfopath135
grep -v "^${cdcode%%,}" "$cdsongpath" > $temppath136
mv -f $temppath $cdsongpath137
echo "成功删除CD:$cdcode"138
}139
find_cd()140
{141
local cdcode=""142
while true143
do144
# clear145
echo "请输入CD代码:"146
echo "<<返回主菜单(q\\Q)"147
read temp148
cdcode=${temp%%,}149
if [ -z "$cdcode" ] ; then150
echo "CD代码不能为空!请重新输入!"151
else152
if [ "$cdcode" = "q" ] || [ "$cdcode" = "Q" ];then153
break154
else155
if is_exist_cdcode $cdcode;then156
pcdcode="$cdcode"157
return 0158
else159
pcdcode=""160
echo "没有查找到相关CD!" 161
fi 162
fi163
fi164
done 165
return 1166
}167
#添加CD168
add_cd()169
{170
clear171
local cdcode="" #CD代码172
local cdname="" #CD名称173
local cdauthor="" #CD作者174
echo "添加CD:"175
while true176
do177
echo "请输入CD代码:"178
read temp179
cdcode=${temp%%,}180
if [ -z "$cdcode" ];then181
echo "CD代码不能为空!请重新输入!" 182
else183
if is_exist_cdcode "$cdcode" ;then184
echo "CD代码:$cdcode已经存在,请重新输入!"185
else186
break187
fi188
fi189
done190
191
echo "请输入CD名称:"192
read temp193
cdname=${temp%%,}194
195
echo "请输入CD作者:"196
read temp197
cdauthor=${temp%%,}198
199
echo "你输入的CD基本信息:"200
echo "代码:$cdcode,名称:$cdname,作者:$cdauthor"201
202
if [ -n "$cdcode$cdname$cdauthor" ] ; then203
get_confirm && {204
local baseinfo="$cdcode,$cdname,$cdauthor"205
#插入CD基本信息206
insert_cd_basinfo "$baseinfo"207
#添加歌曲208
if ! add_songs "$cdcode" ; then #如果一首歌曲都没有添加,删除CD209
remove_cd $cdcode210
echo "添加CD失败!"211
else212
echo "成功添加CD!"213
list_cd "$cdcode"214
fi215
}216
else217
echo "输入CD信息不能为空!系统返回主菜单!" 218
sleep 5219
fi220
221
}222
#更新CD223
update_cd()224
{225
local cdcode=$@226
rmove_cd "$cdcode"227
add_cd228
}229
set_menu_choice()230
{231
clear232
echo "请选择操作:"233
echo "A ) 添加CD D ) 删除CD U ) 修改CD F ) 查找CD V ) 显示CD曲目"234
echo "H ) 帮助 Q ) 退出"235
}236

237
#主调度238
main()239
{240
init241
while true242
do243
set_menu_choice244
read input245
case "$input" in246
A | a )247
add_cd;;248
D | d )249
if find_cd ;then250
get_confirm && {251
rmove_cd "$pcdcode"252
pcdcode=""253
}254
fi255
;;256
U | u )257
if find_cd ;then258
get_confirm && {259
update_cd "$pcdcode"260
pcdcode=""261
}262
fi263
;;264
F | f | V | v)265
if find_cd ;then266
list_cd "$pcdcode"267
pcdcode=""268
fi269
;;270
H | h )271
show_help ;;272
Q | q )273
break;;274
* )275
echo "你的输入有误,请重新输入!"276
esac277
done278
rm -f "$temppath"279
echo "Finished"280
exit 0281
}282
clear283
echo284
echo285
echo "Mini CD manager"286
sleep 1287
main288

:
posted on 2009-07-13 20:33 john.huang 阅读(273) 评论(0) 收藏 举报
浙公网安备 33010602011771号