2

ユーザーのホームディレクトリを取得し、サブディレクトリの最初のレベルを循環し、/Library または /Public フォルダーでない場合にのみ、それらのディレクトリのメンテナンスを実行する bash スクリプトを作成しようとしています。$dir によって返されるディレクトリ名がディレクトリであるというエラー メッセージが表示されるため、これまでのコードは機能しません。コードは次のとおりです。

#!/bin/bash

user="short name"
source_root="/Users/"

source_use="$source_root$user"
cd "$source_use"

dirarr=( */ )

echo ${dirarr[@]}

for dir in "${dirarr[@]}"
do 
    if ( "$dir" -ne "/Library" -o "$dir" -ne "/Public")
        then echo $dir.
            # do something
    fi
done

誰でも私がこれを機能させるのを手伝ってくれますか?

どうもありがとう

4

2 に答える 2

1

スクリプトにはいくつかの問題があります。

  1. [ ]を使用する必要があり[[ ]]ます。ifステートメントで使用する必要があります( )。この例( )では、サブシェルを作成してコマンドを実行しようとし"$dir"ます。これが、表示されるエラーメッセージが表示される理由です。

  2. 見つからない文字列と比較しています-代わりに試し"Library/"てみてください。"Public/"

  3. おそらく-aの代わりに必要です-o

  4. -ne数値を比較するために使用されます。あなたが欲しい!=

スクリプトの修正バージョンは次のとおりです。

#!/bin/bash

user="short name"
source_root="/Users/"

source_use="$source_root$user"
cd "$source_use"

dirarr=( */ )

echo ${dirarr[@]}

for dir in "${dirarr[@]}"
do 
    if [ "$dir" != "Library/" -a "$dir" != "Public/" ]
    then
        echo $dir.
        # do something
    fi
done
于 2012-12-20T23:21:53.403 に答える
1

これを試して:

cd $source_root$user

for dir in `find . -maxdepth 1 -type d`
do
  if [ $dir = ./Library ] || [ $dir = ./Public ]
  then
    continue
  fi

  (Perform actions)
done

また、bash は後方です。!=は文字列が等しくなく、-ne整数は等しくありません。したがって、等号にも変更します。

幸運を!

于 2012-12-20T23:27:07.210 に答える