Linux備忘録14:sshpassでの一括処理、変数内置換(削除)

 

Linux(bash)備忘録。

個人用備忘録のため、内容や記述に誤りがあったら申し訳ありません。

 

【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%/*}でdirname

末尾の固定文字列を削除するときにも使う

${変数%%パターン} 文字列末尾最長マッチ部分を削除  
${変数/検索文字列/置換文字列}

最初にマッチしたもののみ文字列を置換

 
${変数//検索文字列/置換文字列} 全ての文字列を置換 ${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="/home/user/access.log"
echo ${HOGE##*.} #=> logが表示

 ⇒HOGEがピリオドを1個も含まない場合は元の文字列全体になってしまう

 拡張子のみを削除

echo ${HOGE%.*} #=> /home/user/access