if-else 条件を確認するためにユーザー入力文字列を渡します。

if-else 条件を確認するためにユーザー入力文字列を渡します。
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

おすすめ記事