私は現在bashのいくつかの機能を使用しています。しかし、今まで私は混乱しています。まず、私がやりたいことを説明します。
目標出力:
2016-11-18T05:48:01 NFS="NFS1" MOUNT_STATUS=True RUN_TIME=0.1
したがって、このターゲット出力を取得するには、df -hPを使用してすべてのNFSマウントストレージを確認する必要があります。インストールされている場合はTRUEと表示され、それ以外の場合はFALSEと表示されます。したがって、ここで実際に難しいのは、スクリプトがインストールパスにテストファイルを生成する必要があることです。
たとえば、df -hPを実行し(出力は次のようになります)、/ devがマウントされていることを確認します(マウントされている場合)。スクリプトは/ devにテストファイルを生成し、テストファイルを削除して開始時間を記録します。ファイル作成とファイル削除までの終了時間(約0.5ms)
Filesystem Size Used Avail Use% Mounted on
/dev/mapper/centos-root 8.5G 3.7G 4.9G 44% /
devtmpfs 902M 0 902M 0% /dev
tmpfs 913M 0 913M 0% /dev/shm
これは私の現在のスクリプトです。
now="$(date +%Y-%m-%dT%H:%M:%S)"
sp=" "
NFS="NFS1 NFS2 NFS3"
MOUNT_STATUS="$TRUE FALSE" #TRUE or FALSE
RUN_TIME="" #Start time to endtime of script per NFS
if [ $# -eq 0 ]; then
echo $now
set -e
else
for i in "$@"; do
echo -n "$now" ;
echo -n NFS=$(df -hP "$i" | awk '{print $NF}' | sed -n '1!p') 2>&1 | sed 's/^/ /' ;
echo $(if [[ "$i" == "/media /a/nbackup201 /a/ndt301" ]] ;
echo -n MOUNT_STATUS=;
then
echo 'TRUE' ;
else
echo $([[ "$i" != "/media /a/nbackup201 /a/ndt301" ]]) ;
echo 'FALSE' ; fi) | sed 's/^/ /'
done
fi
現時点では、スクリプトにまだいくつかの部分がありませんが、私の質問の1つは次のとおりです。
[root@strg ~]# sh script.sh /dev /run /boot a
2016-11-21T08:50:51 NFS=/dev MOUNT_STATUS=TRUE
2016-11-21T08:50:51 NFS=/run MOUNT_STATUS=TRUE
2016-11-21T08:50:51 NFS=/boot MOUNT_STATUS=TRUE
2016-11-21T08:50:51df: ‘a’: No such file or directory
NFS= MOUNT_STATUS=TRUE
[root@strg ~]#
したがって、スクリプトを実行して間違ったマウントポイントを入力しても、まだ「NFS = MOUNT_STATUS = TRUE」と表示されている場合は、NFS = a STATUS = FALSEとマークする必要があるため、ループに何が問題なのか混乱しています。 ?
とても親切でしたら、ファイルの作成/削除を挿入して時間を記録できる場所を教えてください。ファイルを生成するための最良のオプション/コマンドは何ですか?混乱が多すぎる場合はお知らせください。私はそれをよりよく説明しようとします。
答え1
問題は、スクリプトが各パラメータを繰り返し、パラメータが正しいマウントポイントであるかどうかにかかわらず、すべてのコマンドを実行することです。テストしていませんが、以下の解決策を使用すると、目的の結果が得られます。
now="$(date +%Y-%m-%dT%H:%M:%S)"
sp=" "
NFS="NFS1 NFS2 NFS3"
MOUNT_STATUS="$TRUE FALSE" #TRUE or FALSE
RUN_TIME="" #Start time to endtime of script per NFS
if [ $# -eq 0 ]; then
echo $now
set -e
else
for i in "$@"; do
echo -n "$now" ;
if [ -d $i ]; then
echo -n NFS=$(df -hP "$i" | awk '{print $NF}' | sed -n '1!p') 2>&1 | sed 's/^/ /' ;
echo $(if [[ "$i" == "/media /a/nbackup201 /a/ndt301" ]] ;
echo -n MOUNT_STATUS=;
then
echo 'TRUE' ;
else
echo $([[ "$i" != "/media /a/nbackup201 /a/ndt301" ]]) ;
echo 'FALSE' ; fi) | sed 's/^/ /'
else
echo -n NFS=$i MOUNT_STATUS=false
done
fi