str1="ace"
str2="com"
str3="ros"
$name = readinput(Enter name:)
if [[ "$name" == "$str1" ]];
then
run ace.txt
else
if [[ "$name" == "$str2" ]];
then
run commscope.txt
else
if [[ "$name" == "$str3" ]];
then
run rosgenberger.txt
else
echo "no match found"
fi
fi
fi
스크립트가 실행되지 않습니다. 도와주세요. 내가 원하는 행동은 다음과 같아야합니다
- 사용자 입력이 "ace"인 경우 --- ace.txt를 실행해야 합니다.
- 사용자 입력이 "com"인 경우 --- commscope.txt를 실행해야 합니다.
- 사용자 입력이 "ros"인 경우 --- run rosgenberger.txt가 실행되어야 합니다.
ace.txt/commscope.txt/rosgenberger.txt 스크립트가 있는 경로에서 이 스크립트를 실행합니다.
답변1
다음과 같은 작업을 수행할 수 있습니다.
#!/bin/sh
printf 'Enter name: ' >&2
read -r name
case $name in
ace)
run ace.txt
;;
com)
run commscope.txt
;;
ros)
run rosgenberger.txt
;;
*)
printf 'No match for "%s"\n' "$name"
esac
사용자로부터 "이름"을 읽고 사용자의 응답에 따라 명령을 실행합니다.
bash
셸 에서는 좀 더 간소화된 방법을 사용할 수 있습니다.
#!/bin/bash
declare -A map=(
[ace]=ace.txt
[com]=commscope.txt
[ros]=rosgenberger.txt
)
read -p 'Enter name: ' -r name
if [[ -n ${map[$name]} ]]; then
run "${map[$name]}"
else
printf 'No match for "%s"\n' "$name"
fi
그러면 예상되는 "이름"을 키로, 해당 파일 이름을 값으로 사용하여 연관 배열이 설정됩니다. 사용자의 입력에 따라 명령은 올바른 파일 이름을 사용합니다 run
.
그러나 대부분의 경우 사용자와 상호 작용하기를 원하지 않고 대신 사용자가 명령줄 옵션을 통해 간단히 입력을 제공하도록 허용합니다. 다음은 명령줄을 통해 전달된 첫 번째 인수를 기본값으로 사용하여 입력에 대한 대화형 프롬프트를 우회합니다 name
.
#!/bin/bash
name=$1
declare -A map=(
[ace]=ace.txt
[com]=commscope.txt
[ros]=rosgenberger.txt
)
if [[ -z $name ]]; then
read -p 'Enter name: ' -r name
fi
if [[ -n ${map[$name]} ]]; then
run "${map[$name]}"
else
printf 'No match for "%s"\n' "$name"
fi
이는 다음과 같이 사용됩니다:
./myscript ace
... 예를 들어. 그러면 스크립트는 대화형 질문을 우회하고 실행됩니다 run ace.txt
.
run
명령에 필요한 변수 확장을 통해 오류 보고를 완료함으로써 코드를 더욱 간소화할 수 있습니다.
#!/bin/bash
name=$1
declare -A map=(
[ace]=ace.txt
[com]=commscope.txt
[ros]=rosgenberger.txt
)
if [[ -z $name ]]; then
read -p 'Enter name: ' -r name
fi
run "${map[$name]?Name $name not matched}"
이것은 다음과 같이 출력됩니다
line 15: map[$name]: Name Boo not matched
사용자가 이름을 입력하는 경우 Boo
.
답변2
Bash 셸을 사용한다고 가정하고 이 줄을 자세히 살펴보세요. 함수가 정의 되지 않았 readinput()
으므로 실패합니다.
$name = readinput(Enter name:)
또한 변수 할당에는 양쪽에 공백이 있어서는 안 됩니다 =
. 할당에는 문자가 앞에 붙으면 안 됩니다 $
. 어쩌면 이것을 시도해보십시오:
echo -n "Enter name:"
read name
또한 @AdminBee가 제안한 대로 스크립트 시작 부분에 shebang을 추가해야 합니다.