Linux備忘録14:sshpassでの一括処理、変数内置換(削除)
個人用備忘録のため、内容や記述に誤りがあったら申し訳ありません。
【sshpassを使用しての複数サーバの情報を並列で取得する】
サンプルスクリプト
#!/bin/bash
PASS={パスワード}
LIST_FILE={サーバホスト情報リストのファイルパス}for HOST in `cat ${LIST FILE}`
do
sshpass -p ${PASS} ssh ${HOST} echo `hostname && date '+%H%M%S_%3N'` &
done
※現在検証中
・echoを使用すれば、コマンド実行結果を一行で取得できる。
・コマンド最後に&を記述でループ処理をバックグラウンド実行。※並列でコマンド結果が得られる
・dateの”_%3N”の表記は「ミリ秒を3ケタで表示する」という意味
・60数件の単一コマンド実行であれば、特にラグ等無く、実行結果を得ることが出来た。
【変数内置換パターン】
[#]はコメントアウトで前部分。 [%]は100%で後部分
パターン | 動作 | 使用例 |
---|---|---|
${変数#パターン} | 文字列先頭の最短マッチ部分を削除 | 先頭の固定文字列を削除するとき使う |
${変数##パターン} | 文字列先頭の最長マッチ部分を削除 | ${HOGE##*/} でbasename |
${変数%パターン} | 文字列末尾の最短マッチ部分を削除 |
末尾の固定文字列を削除するときにも使う |
${変数%%パターン} | 文字列末尾の最長マッチ部分を削除 | |
${変数/検索文字列/置換文字列} |
最初にマッチしたもののみ文字列を置換 |
|
${変数//検索文字列/置換文字列} | 全ての文字列を置換 | ${HOGE//{文字列1}/{文字列2}} |
【変数がNULLの場合、変数に値を格納する】
※一時的に置き換えるパターンとそのまま代入するパターンがある。
echo $HOGE # (null)
echo ${HOGE:-hoge} # hoge $HOGEがNULLの場合に"hoge"に置き換える。代入はされない。
echo $HOGE # (null)
echo $FUGA # (null)
echo ${FUGA:=fuga} # fuga $FUGAがNULLの場合に"fuga"に置き換え、かつ、代入もする。
echo $FUGA # fuga ← シェル変数FUGAにfugaが格納される
【変数内置換の使用例】
変数内ファイル名の拡張子のみを取得
⇒HOGEがピリオドを1個も含まない場合は元の文字列全体になってしまう
拡張子のみを削除