Bash 스크립트에서 getopts 옵션을 사용하여 즉시 종료하는 방법

Bash 스크립트에서 getopts 옵션을 사용하여 즉시 종료하는 방법

나는 무엇을 시도했습니까?

#!/bin/bash
# set -e

echo hello
while getopts sr o; do
  case $o in
    s)
        echo "no" 
        yell() { echo "$0: $*" >&2; }
        die() { yell "$*"; exit 111; }
        try() { "$@" || die "cannot $*"; }
        
      ;;
    r) 
        echo "yes"
        yell() { echo "$0: $*" >&2; }
        die() { yell "$*"; exit 111; }
        try() { "$@" || die "cannot $*"; }
        ;;
    \?) exit 3;; #invalid option
  esac
done

echo after_case

내가 하고 싶은 일: 터미널에서 다음 2개의 명령을 실행합니다: bash /home/jian/Desktop/pgdev/test1.sh -s
bash /home/jian/Desktop/pgdev/test1.sh -r
No prints aftercase.

인용하다:Bash에서 getopt를 사용하는 방법
https://stackoverflow.com/questions/1378274/in-a-bash-script-how-can-i-exit-the-entire-script-if-a-certain-condition-occurrs

답변1

이런 식으로 할 수 있습니다. Yell(), die() 및 try() 함수는 스크립트 상단에 작성할 수 있습니다.

#!/usr/bin/env bash
#
usage() {
    echo "usage: <command> options:<s|r|o>"
    echo "-s s_value -r r_value -o o_value"
}
yell() { echo "$0: $*" >&2; }
die() { yell "$*"; exit 111; }
try() { "$@" || die "cannot $*"; }
no_args="true"
while getopts s:r:o: flag; do
    case "${flag}" in
    s) yell
       die
       try
          ;;
    r) resource=${OPTARG} ;;
    o) other=${OPTARG} ;;
    *)
        usage
        exit
        ;;
    esac
    no_args="false"
done
[[ "$no_args" == "true" ]] && {
    usage
    exit 1
}
## other things to do

관련 정보