programing tip

기본값으로 bash에서 변수 읽기

itbloger 2020. 6. 5. 20:15
반응형

기본값으로 bash에서 변수 읽기


bash 스크립트로 터미널에서 값을 읽어야합니다. 사용자가 변경할 수있는 기본값을 제공하고 싶습니다.

# Please enter your name: Ricardo^

이 스크립트에서 프롬프트는 "이름을 입력하십시오 :"입니다. 기본값은 "Ricardo"이며 커서는 기본값 뒤에 있습니다. bash 스크립트에서 이것을 수행하는 방법이 있습니까?


당신이 사용할 수있는 매개 변수 확장의 예를

read -p "Enter your name [Richard]: " name
name=${name:-Richard}
echo $name

대괄호 사이의 프롬프트에 기본값을 포함시키는 것은 일반적인 관례입니다.


read -e -p "Enter Your Name:" -i "Ricardo" NAME

echo $NAME

배쉬 4에서 :

name="Ricardo"
read -e -i "$name" -p "Please enter your name: " input
name="${input:-$name}"

프롬프트 뒤에 다음과 같이 이름이 표시됩니다.

Please enter your name: Ricardo

이름 끝에 커서를 놓고 사용자가 편집 할 수 있도록합니다. 마지막 행은 선택 사항이며 사용자가 입력 또는 기본값을 지우면 (널 제출) 이름이 원래 기본값이됩니다.


암호:

IN_PATH_DEFAULT="/tmp/input.txt"
read -p "Please enter IN_PATH [$IN_PATH_DEFAULT]: " IN_PATH
IN_PATH="${IN_PATH:-$IN_PATH_DEFAULT}"

OUT_PATH_DEFAULT="/tmp/output.txt"
read -p "Please enter OUT_PATH [$OUT_PATH_DEFAULT]: " OUT_PATH
OUT_PATH="${OUT_PATH:-$OUT_PATH_DEFAULT}"

echo "Input: $IN_PATH Output: $OUT_PATH"

샘플 실행 :

Please enter IN_PATH [/tmp/input.txt]: 
Please enter OUT_PATH [/tmp/output.txt]: ~/out.txt
Input: /tmp/input.txt Output: ~/out.txt

이 질문을 발견하여 다음과 같은 것을 제시하는 방법을 찾았습니다.

Something interesting happened.  Proceed [Y/n/q]:

위의 예제를 사용하여 이것을 추론했습니다.

echo -n "Something interesting happened.  "
DEFAULT="y"
read -e -p "Proceed [Y/n/q]:" PROCEED
# adopt the default, if 'enter' given
PROCEED="${PROCEED:-${DEFAULT}}"
# change to lower case to simplify following if
PROCEED="${PROCEED,,}"
# condition for specific letter
if [ "${PROCEED}" == "q" ] ; then
  echo "Quitting"
  exit
# condition for non specific letter (ie anything other than q/y)
# if you want to have the active 'y' code in the last section
elif [ "${PROCEED}" != "y" ] ; then
  echo "Not Proceeding"
else
  echo "Proceeding"
  # do proceeding code in here
fi

희망이 같은 문제가 발생하면 누군가가 논리를 생각할 필요가 없도록 도와줍니다.


방금이 패턴을 사용했습니다.

read name || name='(nobody)'

name=Ricardo
echo "Please enter your name: $name \c"
read newname
[ -n "$newname" ] && name=$newname

기본값을 설정하십시오. 그것을 인쇄하십시오; 새로운 가치를 읽습니다. 새 값이 있으면 기본값 대신 사용하십시오. 프롬프트 종료시 개행을 억제하는 방법에 대한 쉘과 시스템간에 약간의 변형이 있습니다. '\ c'표기법은 3.x bash가있는 MacOS X 10.6.3에서 작동하는 것으로 보이며 Bourne 또는 Korn 쉘을 사용하여 System V에서 파생 된 대부분의 Unix 변형에서 작동합니다.

또한 사용자는 아마도 무대 뒤에서 무슨 일이 일어나고 있는지 알지 못할 것입니다. 새로운 데이터는 이미 화면에 표시된 이름 뒤에 입력됩니다. 형식을 지정하는 것이 좋습니다.

echo "Please enter your name ($name): \c"

#Script for calculating various values in MB
echo "Please enter some input: "
read input_variable
echo $input_variable | awk '{ foo = $1 / 1024 / 1024 ; print foo "MB" }'

The -e and -t parameter does not work together. i tried some expressions and the result was the following code snippet :

QMESSAGE="SHOULD I DO YES OR NO"
YMESSAGE="I DO"
NMESSAGE="I DO NOT"
FMESSAGE="PLEASE ENTER Y or N"
COUNTDOWN=2
DEFAULTVALUE=n
#----------------------------------------------------------------#
function REQUEST ()
{
read -n1 -t$COUNTDOWN -p "$QMESSAGE ? Y/N " INPUT
    INPUT=${INPUT:-$DEFAULTVALUE}
    if  [ "$INPUT" = "y" -o "$INPUT" = "Y" ] ;then
        echo -e "\n$YMESSAGE\n"
        #COMMANDEXECUTION
    elif    [ "$INPUT" = "n" -o "$INPUT" = "N" ] ;then
        echo -e "\n$NMESSAGE\n"
        #COMMANDEXECUTION
    else
        echo -e "\n$FMESSAGE\n"
    REQUEST
    fi
}
REQUEST

참고URL : https://stackoverflow.com/questions/2642585/read-a-variable-in-bash-with-a-default-value

반응형