私は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"