当前位置:  技术问答>linux和unix

麻烦高手帮忙看看这个shell 第 44行,问题我用注释了

    来源: 互联网  发布时间:2017-01-18

    本文导语:  本帖最后由 unhappyless 于 2011-11-24 22:21:18 编辑 #/bin/sh menu_choice="" current_cd="" title_file="title.cdb" tracks_file="tracks.cdb" temp_file=/tmp/cdb.$$ trap `rm -rf $temp_file` EXIT get_return() { echo -e "Press return.c" read x return 0; } get_confirm() { echo -e...

本帖最后由 unhappyless 于 2011-11-24 22:21:18 编辑

#/bin/sh

menu_choice=""
current_cd=""
title_file="title.cdb"
tracks_file="tracks.cdb"
temp_file=/tmp/cdb.$$
trap `rm -rf $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 )
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"
# $cdcatnum 不是全局变量,这个 if 结构里应该永远走不进吧,但实际进了,为啥?
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 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
}

add_records()
{

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
insert_title $cdcatnum,$cdtitle,$cdtype,$cdac
add_record_tracks
else
remove_records
fi
return
}

find_cd()
{
if [ "$1" = "n" ]; then
asklist=n
else
saklist=y
fi

cdcatnum=""
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
return 0;;
esac

IFS=","
read cdcatnum cdtitle cdtype cdac  $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 "^${cdcatnum}," $title_file > $temp_file
mv $temp_file $tiele_file
cdcatnum=""
echo Entry removed
}
get_return
fi
return
}

list_tracks()
{
if [ "$cdcatnum" = "" ]; then
echo no CD selected yet
return
else
grep "^${cdcatnum}," $tarcls_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


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;;
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;

|
如果明确使用局部变量,需要在前面加local限制其作用域
local cdcatnum 

|
local cdcatnum
写函数里就行了

|


++ 这个变量在其他函数里出现过,并且那个函数被调用过,所以你接下来调用这个函数的时候这个全局变量已经存在了.

    
 
 

您可能感兴趣的文章:

  • 初写MAKEFILE遇到问题,麻烦大家帮忙。
  • linux下的串口编程比较熟悉,麻烦帮忙!
  • java编程的一些小问题,麻烦帮忙看看
  • ubuntu8.04 不能上网和关于update的问题(麻烦高手帮忙看看)
  • 一个关于shell的问题,麻烦帮忙解释一下
  • X Window进不进去了,麻烦各位,帮帮忙啊....
  • GTK+-1.2.9 gdk_font_load麻烦帮忙传个字体进去。
  • linux下创建两个进程争夺临界资源,要求用C语言边写!麻烦各位帮帮忙
  • 一个非常奇怪的现象,麻烦大家帮忙看看
  • 几道笔试题,麻烦帮忙看一下,说明为什么
  • 又有错误,JB6的麻烦。高手请帮忙!
  • 麻烦帮忙看一下:这个shell脚本为什么执行不了?
  • 在安装sybase 11.0.3 server for sco unix 遇到一个问题 麻烦高手帮忙看看
  • 编译内核Kernel panic-not syncing:No init found错误,麻烦高手帮忙看看
  • 一个关于sort排序的问题,麻烦会的帮帮忙
  •  
    本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
    本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • 麻烦,好大的麻烦!!
  • 谁有CVS?麻烦帮我下载些源码,急用,万分感谢!
  • 麻烦各位指点一下小弟
  • java开发环境配置为什么这么麻烦
  • java 275 怎么样,有没有用呀?那位知道?麻烦添一块砖吧。
  • 麻烦版主帮我结了这个贴
  • EJB调试起来好麻烦,请问各位有什么高招?
  • 有谁知道台湾中磊(苏州)研发中心的,麻烦告之!!
  • 学习Unix/Linux,麻烦大家推荐本书
  • 谁有linux进程管理方面的资料呀,麻烦传一个
  • 安装VMware出错,麻烦高手指点一下!
  • 想学linux驱动 麻烦高手们推荐本好书啊~~
  • Web服务器/前端 iis7站长之家
  • 问Linux高手一个安卓系统的问题,麻烦回答一下,谢谢!
  • 小弟的程序遇到麻烦了,想和哪位谈谈java的线程(57226475)
  • 麻烦介绍几个你人为不错的java论坛
  • 麻烦,介绍几个linux/unix酷站.
  • 我碰到麻烦了
  • unix 问题,麻烦各位了。
  • lpd好麻烦!!!


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,,E-mail:www_#163.com(请将#改为@)

    浙ICP备11055608号-3