셸 학습 과 사용, 배우 면서 사용 하 는 5!(간단 한 주소록 실현)
#!/bin/bash
# addrList.sh
\# 간단 한 주소록 프로그램, 연락처 정보 추가, 수정, 삭제, 찾기 등 을 실현 합 니 다.
#
이것 은 내 가 우리 팀 원 들 에 게 배치 한 문제 다.그들 에 게 주 는 요 구 는 그들 이 익숙 한 프로 그래 밍 언어 로 이 루어 지 는 것 이다.
그들 이 프로 그래 밍 기초 가 별로 없 는 상황 에서 이 임 무 를 어떻게 완성 하 는 지 더 많이 알 기 위해 서 는
나 는 내 가 배우 지 못 한 셸 발 시험 을 선택 했다.배우 면서 쓰다.
이제 기본 적 인 디자인 을 하 겠 습 니 다.
추가 하면 쉬 워 요.
수입 을 받 고 echo >> 를 사용 하면 연락처 정 보 를 추가 할 수 있 습 니 다.
하지만 찾 으 면 grep 명령 을 사용 하 는 것 도 쉬 워 요.하지만 삭제 하면 어렵 습 니 다.
첫 번 째 버 전의 프로그램 을 먼저 써 보도 록 하 겠 습 니 다.
banxi1988@banxi:~/work/shell$ cat addrList.sh
#!/bin/bash
# addrList.sh
# , , , , 。
#
##
#declare operation; ## TODO use global var
declare QUIT_FLAG;
let QUIT_FLAG="0";
#export QUIT_FLAG
showMenu() {
echo "====================================================";
echo "| *************** ************************|";
echo "====================================================";
echo "|[ (add)] | [ (edit n)] |";
echo "|[ (find)] | [ (delete n)] |";
echo "|[ (all)] | [ n (list n)] |";
echo "|[ (quit)] | [ n (list n)] |";
echo "====================================================";
echo -n "*** >";
}
selectOperation() {
read operation
echo " : $operation...";
#set -x
if [ $operation = "add" ]
then
echo -n " :>";
read name;
echo -n " :>";
read phone
echo "$name $phone" >> my_addr_list.txt
elif [ $operation = "edit" ]
then
echo " "
elif [ $operation = "find" ]
then
echo "prepare find...";
elif [ $operation = "delete" ]
then
echo "prepare delete...";
elif [ $operation = "all" ]
then
echo " ...";
cat my_addr_list.txt
elif [ $operation = "list" ]
then
echo "list...";
elif [ $operation = "quit" ]
then
set -x
QUIT_FLAG="1"; ## quit
set +x
else
echo "WRONG:no such menu choice!";
fi
set +x
}
main() {
set -x ## for debug
echo $quit
while [ "$QUIT_FLAG" -eq 0 ]
do
set +x
showMenu;
selectOperation;
done;
}
main
테스트 실행 결 과 는 다음 과 같 습 니 다.
banxi1988@banxi:~/work/shell$ bash addrList.sh
+ echo
+ '[' 0 -eq 0 ']'
+ set +x
====================================================
| *************** ************************|
====================================================
|[ (add)] | [ (edit n)] |
|[ (find)] | [ (delete n)] |
|[ (all)] | [ n (list n)] |
|[ (quit)] | [ n (list n)] |
====================================================
*** >quit
: quit...
+ QUIT_FLAG=1
+ set +x
banxi1988@banxi:~/work/shell$ bash addrList.sh
+ echo
+ '[' 0 -eq 0 ']'
+ set +x
====================================================
| *************** ************************|
====================================================
|[ (add)] | [ (edit n)] |
|[ (find)] | [ (delete n)] |
|[ (all)] | [ n (list n)] |
|[ (quit)] | [ n (list n)] |
====================================================
*** >edit
: edit...
====================================================
| *************** ************************|
====================================================
|[ (add)] | [ (edit n)] |
|[ (find)] | [ (delete n)] |
|[ (all)] | [ n (list n)] |
|[ (quit)] | [ n (list n)] |
====================================================
*** >quit
: quit...
+ QUIT_FLAG=1
+ set +x
위의 코드 에서 메뉴 기능 에서 전역 변수 QUITFLAG 는 저 에 게 많은 시간 을 들 였 습 니 다. 이 전역 변 수 를 시작 해 야 하 는 것 은 전역 적 이지 않 습 니 다.quit 명령 의 if 분기 용 책 도 보 았 습 니 다.
$QUIT_FLAG = "1"값 을 부여 합 니 다.이렇게 하 는 것 은 내 가 있 는 이곳 의 테스트 에서 문제 가 있 는 것 이 겠 지.
수정 후 코드 구 조 를 조정 한 후 다음 과 같 습 니 다.
#!/bin/bash
# addrList.sh
# , , , , 。
#
##
#declare operation; ## TODO use global var
declare QUIT_FLAG;
let QUIT_FLAG="0";
#export QUIT_FLAG
showMenu() {
echo "====================================================";
echo "| *************** ************************|";
echo "====================================================";
echo "|[ (add)] | [ (edit n)] |";
echo "|[ (find)] | [ (delete n)] |";
echo "|[ (all)] | [ n (list n)] |";
echo "|[ (quit)] | [ n (list n)] |";
echo "====================================================";
echo -n "*** >";
}
selectOperation() {
read operation
echo " : $operation...";
#set -x
if [ $operation = "add" ]
then
doAdd ## doAdd()
elif [ $operation = "edit" ]
then
echo " "
elif [ $operation = "find" ]
then
doFind ## doFind()
elif [ $operation = "delete" ]
then
echo "prepare delete...";
elif [ $operation = "all" ]
then
doAll ## doAll()
elif [ $operation = "list" ]
then
echo "list...";
elif [ $operation = "quit" ]
then
set -x
QUIT_FLAG="1"; ## quit
set +x
else
echo "WRONG:no such menu choice!";
fi
set +x
}
doAdd() {
echo "do add...";
echo -n " :>";
read name;
echo -n " :>";
read phone
echo "$name $phone" >> my_addr_list.txt
}
doFind() {
echo -n " :>";
read cond;
### TODO judge if my_addr_list.txt is exists
if [ -e my_addr_list.txt ]
then
echo `grep -in $cond my_addr_list.txt`
else
echo " ";
fi
}
doAll() {
if [ -e my_addr_list.txt ]
then
echo "=================== :============";
echo cat my_addr_list.txt
echo "===================================================";
else
echo " ";
fi
}
main() {
set -x ## for debug
echo $quit
while [ "$QUIT_FLAG" -eq 0 ]
do
set +x
showMenu;
selectOperation;
done;
}
main
= = = = = = = = = = = = = 미 완 미 속 = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = =
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
ZSH에서 물고기까지ZSH는 수년 동안 내 기본 셸이었습니다. 이제 몇 달 동안 사용하면서 ZSH 구성에 대해 몇 가지 사항을 발견했습니다. 우리는 을 제공하는 시스템과 더 빨리 상호 작용하는 경향이 있습니다. 내.zshrc 구성에는 ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.