다른 스크립트와 상호 작용하는 스크립트를 작성해 달라는 요청을 받았지만 막혔습니다. 내가 상호작용하고 있는 스크립트는 다음을 반영합니다. "1"을 다시 보내야 합니다. 하지만 아직은 거기까지 갈 수가 없어요...
echo -e "Select option 1"
echo -e "? \c"
내가 지금까지 시도한 것 - 내가 아는 한:
expect "?"
send "1"
expect "? "
send "1"
expect "? \n"
send "1"
expect "? \c"
send "1"
이 중 어느 것도 작동하지 않는 것 같습니다. 누군가 나에게 올바른 방향을 알려줄 수 있습니까? :)
\r
1
추신: 첫 번째 장애물을 넘고 나면 하나 더 추가해야 할 것 같습니다 ...
답변1
에서 echo -e "? \c"
해당 부분은 아무것도 인쇄되지 않으며 인수로 전달된 문자열 뒤에 개행을 인쇄하지 않는 것이 \c
명령의 지시입니다 . 따라서 예상에서는 문자열 (물음표, 공백) echo
을 예상해야 합니다 . "? "
명령에 대한 인수는 와일드카드가 포함 expect
된 패턴이므로 ?
물음표를 문자 그대로 해석해야 합니다.
expect -ex "? "
send "1\r"
¹ 일부 다른 구현 echo
(예: bash 내장)에서는 echo -n "?"
이 구문을 사용합니다.
답변2
거의 다 왔습니다. read
내장된 기능 사용을 고려하십시오 (TDLP: 사용자 입력 캡처):
예시 읽기
cat leaptest.sh
#!/bin/bash
# This script will test if you have given a leap year or not.
echo "Type the year that you want to check (4 digits), followed by [ENTER]:"
read year
if (( ("$year" % 400) == "0" )) || (( ("$year" % 4 == "0") && ("$year" % 100 !=
"0") )); then
echo "$year is a leap year."
else
echo "This is not a leap year."
fi
알아채다6호선. year 변수는 BASH에 의해 동적으로 생성되며 echo 문의 출력을 저장하는 데 사용됩니다.
사용자 입력 테스트 예시
cat friends.sh
#!/bin/bash
# This is a program that keeps your address book up to date.
friends="/var/tmp/michel/friends"
echo "Hello, "$USER". This script will register you in Michel's friends database."
echo -n "Enter your name and press [ENTER]: "
read name
echo -n "Enter your gender and press [ENTER]: "
read -n 1 gender
echo
grep -i "$name" "$friends"
if [ $? == 0 ]; then
echo "You are already registered, quitting."
exit 1
elif [ "$gender" == "m" ]; then
echo "You are added to Michel's friends list."
exit 1
else
echo -n "How old are you? "
read age
if [ $age -lt 25 ]; then
echo -n "Which colour of hair do you have? "
read colour
echo "$name $age $colour" >> "$friends"
echo "You are added to Michel's friends list. Thank you so much!"
else
echo "You are added to Michel's friends list."
exit 1
fi
fi
특정 경우에는 교체합니다.5호선스크립트의 옵션 목록을 사용하고 17행에서 시작하는 if를 수정하여 전달한 옵션과 일치시킵니다 ANS
. 옵션이 일치하면 if
아래와 같이 스크립트를 실행하십시오.sh myscript.sh --option ANS