リストを確認して結果に応答するための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" 

私はここで真新しい人であることを知っていますが、応答が何であれ、ファイル(ファイル内の内容)について1行ずつ確認する必要があるかどうかはわかりません。その後、その行の関連変数を返します。

好きだと言う

"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ものは垂直線の後のすべてです。 (1行に変数を追加するには、より多くの垂直線で区切ってください。)

スクリプトの開始は次のとおりです。

#!/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

コードには1つの変更が必要です。

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

関連情報