셸 학습 과 사용, 배우 면서 사용 하 는 5!(간단 한 주소록 실현)

7561 단어 shellgrepbash
인용 하 다.
#!/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


= = = = = = = = = = = = = 미 완 미 속 = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = =

좋은 웹페이지 즐겨찾기