ファイルからユーザーとサーバーの詳細を読み取り、tempo.txt
別のスクリプトを使用してその unix アカウントでファイルシステムのディスク容量を確認しようとしますserver_disk_space.sh
。しかし、なぜwhileループは最初の行でのみ機能し、forループはうまく機能するのかわかりません。これを理解するのを手伝ってください。
whileループの使用
#!/usr/bin/ksh
while read line
do
r1=`echo $line | cut -d"#" -f1`;
r2=`echo $line | cut -d"#" -f2`;
apx_server_disk_space.sh $r2 $r1
done<tempo.txt
出力
8
forループの使用
#!/usr/bin/ksh
for line in $(cat tempo.txt)
do
r1=`echo $line | cut -d"#" -f1`;
r2=`echo $line | cut -d"#" -f2`;
apx_server_disk_space.sh $r2 $r1
done
出力
8
23
54
89
12
コンテンツserver_disk_space.sh
#!/usr/bin/ksh
user=$1
server=$2
count=`ssh ${user}@${server} "df -h ."`
echo ${count} | awk '{print $12}' | tr -d %
Use percentage
上記のスクリプトは、すべてのサーバーのディスク使用量の値を出力します。
コンテンツtempo.txt
abclin542#abcwrk47#
abclin540#abcwrk1#
abclin541#abcwrk2#
abclin543#abcwrk3#
abclin544#abcwrk33#
答え1
-n
オプションを追加しない限り、ssh
標準ssh
入力から読み取られます。 while ループの場合は tempo.txt ファイルです。
また、別のファイル記述子を使用して tempo.txt ファイルを読み取ることもできます。
#! /usr/bin/ksh -
while IFS='#' read <&3 -r r1 r2 rest; do
apx_server_disk_space.sh "$r2" "$r1"
done 3< tempo.txt
これらのサーバーがGNU / Linuxサーバーの場合、SSHスクリプトは次のようになります。
#! /bin/sh -
ssh -n "$1@$2" 'stat -fc "scale=2;100*(1-%a/%b)" .' | bc
これはより強力で未来志向の可能性があります。