値を返し、変数に保存

値を返し、変数に保存

2つの値を返す文があります。

cat /ora$sid/dbs/listener.ora|grep PORT|sed 's/.*PORT.*\([0-9]\{4\}\)\(.*\)/\1/'

Return
1521
1522

この文章で私はただ価値を得たいと思います。この値を変数に保存してsqlplus文字列を作成し、oracleデータベースに自動的に接続してからコマンドを実行したいと思います。

返される結果の数を制限し、後で別のコマンドでその値を使用できるように変数に保存するにはどうすればよいですか。

修正する:

この文をssh呼び出しに追加しましたが、実行すると値が得られません(ヘッド-1ではssh呼び出しは正しく機能しません)。

read -p "Maquina : " maquina; read -p "SID : " sid; ssh ora$sid@`echo $maquina` "port=$(cat /ora$sid/dbs/listener.ora|grep PORT|sed 's/.*PORT.*\([0-9]\{4\}\)\(.*\)/\1/ ' | head -1)| echo $port"

答え1

コマンドの構成方法を考慮して、1 つの結果のみを取得するには、 を使用するか、両方を組み合わせてhead使用tail​​することをお勧めします。最初の結果だけが必要な場合は、head -1これを行う必要があります。特定の行番号を見つけるには、とのhead組み合わせが必要な場合があります。tail

答え2

最初の戻り値が必要な場合は、|head -1それを使用して取得できます。

$()その後、構造を使用して値として返すことができます。

port=$(cat /ora$sid/dbs/listener.ora|grep PORT|sed 's/.*PORT.*\([0-9]\{4\}\)\(.*\)/\1/' | head -1)

答え3

単一のコマンドで実行できるのと同じ操作を実行するコマンドがたくさんあります。

「listener.ora」の形式がどのように指定されたかはわかりませんが、下の行は少しだけ調整すると正しく機能します。

sed -rn '/PORT/s/.*([0-9]{4}).*/\1/p' /ora$sid/dbs/listener.ora

-r編集された行を印刷するために置き換えるために使用されるPORTを含む行を見つけるために
-n自動印刷を抑制するために使用される正規表現で使用されます。
/PORT/
s/
/p

どちらかの値を取得するには、headまたはtailを使用します。

$PORT0=(sed -rn '/PORT/ s/.*([0-9]{4}).*/\1/p' /ora$sid/dbs/listener.ora | ヘッダー -1)

または両方が必要な場合:

scrap_port() { sed -rn '/PORT/ s/.*([0-9]{4}).*/\1/p' /ora$sid/dbs/listener.ora }
$PORT0=$(grab_port|ヘッド-1)
$PORT1=$(grab_port|tail-1)

それでは、ラインを見てみましょう。

読み取り -p "マキナ:"maquina;読み取り -p "SID:"sid; ssh ora$sid@`echo $maquina` "port=$(cat /ora$sid/dbs/listener.ora|grep PORT|sed ' s/.*PORT.*\([0-9]\{4\ }\)\(.*\)/\1/ ' | echo $port"

"port=独自の変数の結果を独自にパイピングすることで終わるセクションから始めるのは、| echo $port"ここで行うことではありません。編集:言うまでもなくコマンドを実行したり、変数を生成したりしません。ただ正しく構築されていないだけです。

ポート変数をあらかじめ設定しておくと簡単です。

-p "Maquina:"maquinaを読む。 -p "SID:"sid@`echo $maquina` "$PORT0" を読む

答え4

grep -m1 PORT /ora$sid/dbs/listener.ora | sed 's/.*PORT.*\([0-9]\{4\}\)\(.*\)/\1/'

または

返される一致の数を制限するには、if($count> NUM)を変更します。ここでは、一致を3つに制限します。

perl -e 'my $count = 0; while(<>) { if(/PORT (\d+)/) {print "$1\n"; $count+=1; if($count > 2) {exit}} }' /ora$sid/dbs/listener.ora

関連情報