목록을 확인하고 결과로 응답하기 위한 Linux bash의 사용자 입력

목록을 확인하고 결과로 응답하기 위한 Linux bash의 사용자 입력

나는 bash가 사용자에게 읽기를 입력하고 파일 또는 파일 목록을 확인하도록 요청한 다음 해당 확인 결과로 응답하도록하려고합니다. 내가 지금까지 얻은 것은 다음과 같습니다 ...

read -p "what are we looking for?" RESP
if [ "$RESP" = sed -n ${some line from inside file} ./file | 
then do "returned variable from file"

else
echo "You need more bash programming" 

나는 여기에 아주 새로운 사람이라는 것을 알고 있지만 응답이 무엇이든 파일(파일 내부에 있는 내용)에 대해 한 줄씩 확인해야 하는지 알 수 없습니다. 그런 다음 해당 줄에 대한 관련 변수를 반환합니다.

좋아한다고 말해

"RESP"=line 3(or any line that matches) of ./this_file 
return "var1" of that line
Do "var1"

fi

이렇게 하는 방법이 있나요? 이 코드가 간단한 bash에서 어떻게 보일지 혼란스럽습니다. 도와주세요.

예:

line1:"Google을 열어주세요" "var1[http:www.google.com 열기]

bash에 "var1" 전달

답변1

파일의 경우 다음 형식을 권장합니다.

please open google|open http:www.google.com

여기의 응답은 수직 막대 앞의 모든 것입니다. 당신의 var1것은 수직선 이후의 모든 것입니다. (한 줄에 더 많은 변수를 넣으려면 더 많은 수직선으로 구분하세요.)

스크립트의 시작은 다음과 같습니다.

#!/bin/sh
read -p "what are we looking for? " response
action="$(awk -F\| -v r="$response" '$1==r{print $2;exit}' file)"
eval "$action"

읽기 명령이 입력됩니다. (가장 좋은 방법은 중요한 내용을 실수로 덮어쓰지 않도록 쉘 변수에 소문자를 사용하는 것입니다.)

with 줄은 awk로 시작하는 파일의 첫 번째 줄에서 작업을 추출합니다 response|. 첫 번째 수직 막대 이후의 모든 것이 사용자의 명령이라고 가정합니다.

위의 마지막 줄이 실행됩니다 action. 로 이를 수행합니다 eval. 사용하려면 eval일정 수준의 신뢰가 필요합니다. 디자인을 다듬을 때 의 사용을 제거해야 합니다 eval.

다른 필드 구분 기호 사용

필드 구분 기호 대신 @of를 사용하면 다음 줄이 표시됩니다.|file

please open google@open http:www.google.com

코드에는 한 가지 변경이 필요합니다.

read -p "what are we looking for? " response
action="$(awk -F@ -v r="$response" '$1==r{print $2;exit}' file)"
eval "$action"

관련 정보