2

現在、各ユーザーの/ Library / Mailフォルダー内をチェックして、V2という名前のフォルダーが存在するかどうかを確認するbashスクリプトを作成しようとしています。スクリプトは、配列内の各アイテムがユーザーである配列を作成し、これらの各ユーザーを反復処理して、ホームフォルダーで上記のキャプション付きのコンテンツを確認する必要があります。これは私がこれまでに持っているものです:

#!/bin/bash

cd /Users

array=($(ls))

for i in ${array[@]}
do

if [ -d /$i/Library/Mail/V2 ]

then
    echo "$i mail has been upgraded."
else 
    echo "$i FAIL"

fi

done
4

1 に答える 1

5

の出力から配列にデータを入力lsすると、スペースを含むユーザー名がある場合に深刻な問題が発生します。代わりにglob式を使用してください。また、using[ -d $i/... ]は、スペースを含む名前でも同様に機能します。use [[ -d $i/... ]][[ ]]構造には独自の構文規則があり、引用符は不要)または[ -d "$i/..." ](引用符を使用)のいずれかです。

"${array[@]}"同様に、次のように、文字列分割によって名前がスペースで2つに分割されないようにするには、二重引用符で囲む必要があります。

cd /Users
array=(*)
for i in "${array[@]}"; do
  if [[ -d $i/Library/Mail/V2 ]]; then
    echo "$i mail has been upgraded."
  else 
    echo "$i FAIL"
  fi
done

とはいえ、ここでは実際には配列はまったく必要ありません。

for i in *; do
  ...check for $i/Library/Mail/V2...
done
于 2012-05-16T20:25:33.577 に答える