쉘 스크립트 메뉴

2023. 12. 30. 22:41리눅스 실제 사용 팁/bash

다음은 모 Q&A 사이트에 답변으로 달았던 내용이다. 쉘 스크립트를 익히는 과정이기도 했고 추후 쉘스크립트 참고용도로 여기에 올린다.

#!/bin/bash

echo ----------------------------------------
echo 나의 명령어 메뉴에 오신 것을 환영합니다.
echo ----------------------------------------
echo 1. 파일 리스트.
echo 2. 파일 삭제.
echo 3. 에디터 시작.
echo 4. 파일 내용 보기.
echo 5. 종료.
echo -------------------------------------------
read -p '메뉴 번호 입력: ' NUM

if [[ $NUM -eq '1' ]];then
	echo 
	read -p '리스트할 디렉터리 입력: ' LS_DIR

	if [[ $LS_DIR='~' ]];then
		LS_DIR=$HOME
	fi

	if [[ ! -d $LS_DIR ]];then
		echo 존재하지 않는 디렉토리이거나 액세스 권한이 없습니다!
		exit 1
	else
		echo ----------------------------------------
		echo $LS_DIR 
		echo ----------------------------------------
		ls -l $LS_DIR
		echo ----------------------------------------
	fi


elif [[ $NUM -eq '2' ]];then
	read -p '삭제할 파일 또는 디렉토리 입력: ' RM_TGT

	if [[ -f $RM_TGT || -d $RM_TGT ]];then
		echo ----------------------------------------
		echo $RM_TGT 를 삭제합니다!
		echo ----------------------------------------
		rm -rf $RM_TGT
	else
		echo 삭제 대상을 잘못 입력했거나 액세스 권한이 없습니다!
	fi

elif [[ $NUM -eq '3' ]];then
	for _EDITOR in nano vi emacs joe mcedit;do
		if [[ -x $(which $_EDITOR) ]];then
			echo ----------------------------------------
			echo $_EDITOR' 편집기를 실행합니다. (계속 하려면 아무 키나 누르세요.)'
            read -p '(본 스크립트 실행을 중단하려면 <Ctrl><C>를 누르세요!)'
			echo ----------------------------------------
			bash -c $_EDITOR -c "set ft=unix" -c "x"
			touch .found-
			break;
		fi
	done

	if [[ ! -f '.found-' ]];then
		echo 편집기를 찾을 수 없습니다.
	else
		rm '.found-'
	fi

elif [[ $NUM -eq '4' ]];then
	read -p '들여다 보고픈 파일 경로를 입력하세요: ' VIEW_TGT
	if [[ ! -f $VIEW_TGT ]];then
		echo 파일이 존재하지 않거나 일반 파일이 아닙니다!
	elif [[ `wc -l $VIEW_TGT` > 50 && -x `which less` ]];then
		echo '내용이 길어서 less 를 실행합니다. (q 를 눌러서 종료가능)'
		echo ----------------------------------------
		less $VIEW_TGT
		echo ----------------------------------------
	else
		echo ----------------------------------------
		cat $VIEW_TGT
		echo ----------------------------------------
	fi

elif [[ $NUM -eq '5' ]];then
	exit 0
else
	echo 해당된 메뉴가 없어서 종료합니다.
fi