다양한 사용자 입력을 기반으로 다중 옵션 텍스트 기반 스토리를 완성하려고 합니다. 다양한 명령문을 테스트하고 VI 편집기를 사용하여 스크립트 작성을 시작하는 재미있는 프로젝트처럼 보이지만. (나는 매우 기술적이기를 원하지 않으며 스크립팅 경험도 없습니다).
이것이 내가 얻는 것입니다:
그러나 나타나는 결과는 다음과 같기 때문에 결과를 생성하는 마지막 echo 문을 얻을 수 없습니다.
문자 대신 숫자가 되도록 "if" 문에서 "input_user_name"으로 "0"(숫자)을 사용해 보았지만 소용이 없었습니다. 무엇이 잘못되었는지 잘 모르겠습니다(한숨). 이것은 매우 쉬운 수정일 수 있습니다.
답변1
if ($input_user_name == 'n'); ...
괄호는 다음에 사용됩니다.명령 그룹화, 이는 선언에 그다지 유용하지 않습니다 if
. (어떤 이유로든 서브셸이 필요한 경우를 제외하고) 실제로 이는 와 동일하며 결과를 if $input_user_name == 'n';
확장 input_user_name
, 분할 및 와일드카드하여 명령으로 실행합니다. 일단 입력하면 Bruce
쉘이 명령을 실행합니다 Bruce
.
답변2
이에 대해 몇 가지 가정을 하고 있지만 코드를 다음과 같이 수정했습니다.
#! /bin/bash -
clear
echo -e "\nWelcome, $(whoami)\nShall we change this to something more appropriate?"
read -rp "If not enter input 'n' and press [ENTER] " input_user_name
if [[ "$input_user_name" == 'n' ]]; then
user_name="$(whoami)"
else
user_name="$input_user_name"
fi
echo "You are ${user_name}!"
처음 몇 줄을 newline , tab 및 기타 몇 가지 특수 문자를 허용하는 echo
한 줄로 변경했습니다 .echo -e
\n
\t
read
또한 귀하의 명령문을 한 줄로 변경 하고 -r
백슬래시가 깨지는 것을 방지하기 위해 스위치를 추가했습니다.
합법적인 테스트를 수행하지 않기 때문에 10행에서 오류가 발생합니다. 대괄호를 사용하거나 둥근 괄호 대신 [
가급적이면 대괄호를 사용해야 합니다 .[[
또한 쉘/배시 구문에서는 이런 방식으로 변수 할당에 공백을 넣을 수 없습니다. 다음과 같아야 합니다.
variable=value
아니요
variable = value
또는
$variable = value
등
답변3
( ) 대신 대괄호 [ ]를 사용하세요.
#!/bin/bash
set +x
clear
echo
echo "Welcome, $(whoami)"
echo
echo "Shall we change this to something more appropriate?"
echo "if no,simply enter 'n' then press [Enter]:"
read input_user_name
if [ $input_user_name == "n" ];
then user_name=`whoami` ## i have used `` to get the value of whoami
else
user_name=$input_user_name
fi
echo "Your $user_name !"
산출:
Welcome, vikasven
Shall we change this to something more appropriate?
if no,simply enter 'n' then press [Enter]:
Vikas
Your Vikas !
답변4
then user_name = $whoami
로 변경then user_name=$(whoami)