2016-09-02 6 views
1

ファイルパスまたはディレクトリパスの配列項目を調べようとしています。天気をチェックすると、シェルスクリプトのディレクトリまたはファイルである

#!/bin/bash 

declare -a arr=("/var/log/symantec/sgs-td","/var/lib/mysql/mysql-slow.log","/var/lib/mysql/mysql-error.log", "/var/log/sa") 

## now loop through the above array 
for i in "${arr[@]}" 
do 
if [[ -d $i ]]; then 
    echo "$i is a directory" 
elif [[ -f $i ]]; then 
    echo "$i is a file" 
else 
    echo "$i is not valid" 
    exit 1 
fi 
done 

私はシェル構文に関する知識がありません。

パスがディレクトリの場合、printはディレクトリです。ファイルの場合はファイルを出力します。

+0

ご質問はありますか? – Fazlin

+0

スクリプトの実行時に実際に出力されるのは何ですか? – Uroc327

+0

/var/log/symantec/sgs-td,/var/lib/mysql/mysql-slow.log,/var/lib/mysql/mysql-error.logは無効です。 –

答えて

0

大きな間違いは、宣言しながら配列リストにカンマを入れていました。レストコードは問題ありませんし、正常に動作します。

#!/bin/bash 

declare -a arr=("/char/vlog/tec/sg" "/chr/lib/mysql/mysq.log" "/dar/lib/mysql/error.log" "/char/log/sua") 

## now loop through the above array 
for i in "${arr[@]}" 
do 
if [[ -d $i ]]; then 
    echo "$i is a directory" 
elif [[ -f $i ]]; then 
    echo "$i is a file" 
else 
    echo "$i is not valid" 
    exit 1 
fi 
done