읽기에서 별도의 매개변수/변수를 사용하는 방법

읽기에서 별도의 매개변수/변수를 사용하는 방법

재미로 bash를 사용하여 CLI를 만들고 싶습니다. 나는 다음과 같은 읽기 프롬프트를 원한다

CLI/[path]/:>

단순한

read -p "CLI$PWD/:>"

그러나 이와 같은 명령을 수행하려면 cd디렉토리를 변경하기 위한 전체 인터페이스를 만들어야 합니다. 다른 기본 명령을 모두 실행하는 방법을 알고 있지만 주요 목표는 하나의 명령으로 디렉터리를 변경할 수 있는 것입니다.

예를 들어:

CLI/[path]/:>cd [another path]
CLI/[another path]/:>

지금까지 내 스크립트는 다음과 같습니다.

#!/bin/bash

echo "Welcome to Easy Command-Line Interface! Type 'help' for help and 
commands."

while true; do

    read -p "ECLI$PWD/:>"
    if [ $REPLY = "help" ]; then
        echo "ECLI HELP:"
        echo "help: Help Menu"
        echo "cd: <dir> : Changes Directory"
        echo "say: <text> : Prints <text>"
        echo "exit: Exits ECLI"
        echo "clear: Clears screen"
        echo "
        "
    fi

    if [ $REPLY = "exit" ]; then
        echo "Exiting ECLI.."
        sleep 1.5
        clear
        break
    fi

    if [ $REPLY = "clear" ]; then
        clear
    fi


done

답변1

먼저 따옴표를 사용하기 시작해야 합니다. 눈치채셨나봐요

만약 [ $REPLY = "주문하다"]
[: too many arguments두 개 이상의 단어가 포함된 명령줄을 입력하면 입력이 실패합니다(오류 메시지와 함께). 다음으로 변경해야 합니다.

만약에 ["$답글"="주문하다"]

방법 1: 줄을 읽고 첫 번째 단어 추출

현재 스크립트가 전체 입력 줄 을 $REPLY. cd /usr/local를 사용하여 이 작업을 수행할 수 있습니다. 다음은 매개변수 확장의 예입니다.cd /usr/localcdword1="${REPLY%% *}"큰 타격(1)또는POSIX 사양. 따라서 다음과 같이 스크립트를 수정할 수 있습니다.


    if ["$REPLY" = "지우기"];
        분명한
    필리핀 제도
 
    word1="${답장%% *}"
    if["$word1"=cd]
    그 다음에
        $답글
    필리핀 제도

방법 2: 첫 번째 단어만 읽기

전체 줄을 읽고 싶은 경우는 거의 없습니다. 이 예에서처럼 쉘이 줄을 단어로 나누기를 원하는 경우가 더 많습니다. read읽을 변수 목록을 명령에 제공하여 이를 수행 할 수 있습니다 .


    -p "ECLI$PWD/:>" 읽기명령 매개변수

    만약에 ["$cmd"= "지우기"];
        분명한
    필리핀 제도

    if["$cmd"=cd]
    그 다음에
        CD "$args"
    필리핀 제도

방법 3: 각 단어를 개별적으로 읽기

위의 방법은 개념 증명 장난감에 적합합니다. 실제 애플리케이션에서는 쉘이 입력 행을 원하는 수의 단어로 나누기를 원할 수 있습니다. 다음 옵션을 사용하여 배열을 읽어서 이를 수행할 수 있습니다 -a .


    -p "ECLI$PWD/:>" 읽기-아르
 
    만약에 ["${arr[0]}"= "지우기"];
        분명한
    필리핀 제도
 
    if [ "${arr[0]}" = cd ]
    그 다음에
        cd "${arr[1]}"
    필리핀 제도

관련 정보