나는 물었다StackOverflow에 대한 이 질문어제 나는 Linux에 대한 지식이 부족하여 그것을 엉망으로 만들고 일반적으로 사람들의 시간을 낭비했습니다.
이제는 더 잘할 수 있기를 바랍니다. 나는 이 문제를 해결하기 위해 다양한 방법을 시도했지만 결국 여기 사람들이 나에게 실제로 필요한 것이 무엇인지 혼란스럽게 만들었습니다.
사용자가 매개변수를 전달하는지 여부에 따라 다른 하위 메뉴 스크립트를 호출하는 스크립트를 만들어야 합니다. 인수가 "help"인 경우 화면을 지우고 사용자에게 help 명령 사용 방법을 알려주는 짧은 메시지를 표시해야 합니다. 그렇지 않으면 스크립트가 해당 하위 메뉴를 표시합니다.
다른 매개변수는 "파일" "텍스트" "상태"이며, 사용되면 전문가 스크립트를 호출하고, 그렇지 않으면 사용자 메뉴에서 초보자 스크립트를 호출합니다.
나는 사용자가 특정 매개변수를 전달했는지 여부에 따라 실행하고 싶은 fileExpert, fileNovice, textExpert, textNovice 등이라는 이름의 총 6개의 다른 스크립트 자리 표시자가 있는 모델을 만들었습니다.
지금까지의 연구를 통해 비슷한 조건부 테스트를 설정해야 한다는 것을 알고 있지만
if $>0 then go into expert or if there are no arguments execute novice
그 이상으로는 완전히 헤매고 있습니다.
이것이 완전히 말도 안되는 소리처럼 들리지 않고 어느 정도 진실이 있기를 바랍니다.
답변1
여기의 논리가 괜찮기를 바라며 짧은 버전과 긴 버전을 사용할 수 있기를 바랍니다.
테스트 사례:
./Main.sh ## Error
./Main.sh -i Text ## Expert
./Main.sh -i dummy ## Novice
./Main.sh -i File foobar ## Error
./Main.sh -i ## Error
./Main.sh -h ## Help
메인.sh:
#!/bin/bash
usage="############################ HELP ############################
Main.sh [-h] [-i input] -- call submenus
Where:
-h,--help : Show this helper
-i,--input : Could be either File | Text | Status\n"
unset -v INPUT
err=false
POS=()
while [[ $# -gt 0 ]]
do
opt="$1"
case $opt in
-i|--input)
INPUT="$2"
if [ -z "${INPUT}" ]; then
echo "Syntax Error : Argument for ${opt} cannot be empty "
printf "$usage"
exit 1
fi
shift 2
;;
-h|--help)
printf "$usage"
echo -e "\r"
exit 0
;;
*)
POS+=("$1")
shift
err=true
echo "Syntax Error : Additional argument not used"
printf "$usage"
exit 1
;;
esac
done
set -- "${POS[@]}"
## Your logic here
if [ -z "${INPUT}" ] && [ "${err}" = false ] ; then
echo "Syntax Error : -i option is necessary"
printf "$usage"
exit 1
elif [ -z "${INPUT}" ] && [ "${err}" = true ] ; then
echo "Syntax Error : -i option is necessary"
exit 1
elif [ "${INPUT}" == "File" ] || [ "${INPUT}" == "Text" ] || [ "${INPUT}" == "Status" ] ; then
# call Expert scripts
<path_to_fileExpert>
<path_to_textExpert>
exit 0
else
# call Novice scripts
<path_to_fileNovice>
<path_to_textNovice>
exit 0
fi