読み取りで別々のパラメータ/変数を使用する方法

読み取りで別々のパラメータ/変数を使用する方法

楽しみにbashを使用してCLIを作成したいと思います。私は次のような読み取りプロンプトが欲しい

CLI/[path]/:>

シンプル

read -p "CLI$PWD/:>"

ただし、このようなコマンドを実行するには、ディレクトリをcd変更するための完全なインターフェイスを作成する必要があります。他の基本コマンドをすべて実行する方法を知っていますが、主な目的は、1つのコマンドでディレクトリを変更できることです。

たとえば、

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:行を読み、最初の単語を抽出する

現在のスクリプトは完全な入力行を$REPLYcd /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]}"
    フィリピン諸島

おすすめ記事