要素にスペースがあり、スペースがないBash配列

ハックルベリーフィン

私はこの質問がさまざまな方法で尋ねられたことを知っています、そして私は私が今いるところにたどり着くためにここでいくつかの答えを参照しました。

書き込みが行われなくなったら、基本的にフォルダとウイルススキャンファイルを監視するスクリプトを作成しようとしています。

処理する必要のあるファイル/文字列には、スペースが含まれる場合と含まれない場合があり、特殊文字が含まれる場合もあります。現時点では、名前にスペースが含まれているファイル(実際にスキャンして移動する場合など)でのみ機能しますが、スペースが含まれていないファイルでは機能しません。また、各ファイル(スペースの有無にかかわらず)の後で、whileループが中断し、次の出力でスクリプトが停止します。

./howscan.sh: line 29: snmp.conf: syntax error: invalid arithmetic operator (error token is ".conf")
./howscan.sh: line 34: snmp.conf: syntax error: invalid arithmetic operator (error token is ".conf")  

スペースなしでファイル名を処理するように機能させましたが"${files[$i]}"、配列要素を使用する方法を導入したため、スペース付きのファイルでのみ機能し、上記のエラーを出力します。

これのsepscan部分は、他のタスクでも機能することができると確信しているので、自由に省略してください(完全に理解するために完全なスクリプトを表示したかっただけです)。

現在のスクリプト:

#!/bin/bash

set -x

workingpath='/mnt/Incoming/ToScan/'
outputpath='/mnt/Incoming/Scanned/'
logfile='/var/log/howscan.log'
faildir='/mnt/Incoming/ScanFailed/'
sepscan='/opt/Symantec/symantec_antivirus/sav manualscan -c'

# Change to working directory
cd $workingpath

# Exclude files with a given extension, in this case .aspx, and declare the remaining files as the array "files"
shopt -s extglob nullglob

# Loop the below - ie it's a watch folder
while true
    do
    # Exclude files with .aspx in the file name
    files=( !(*.aspx) )
    # If the array files is not empty then...
    if [ ${#files[@]} -ne 0 ]; then
        for i in ${files[*]}
        # For every item in the array files process them as follows
        # Declare any variables you wish to happen on files here, not globally
        # Check each file to see if it's in use using fuser, do nothing and log it if its still in use, or process it and log the results
        do
            fileopen=`fuser "${files[$i]}" | wc -c`
            # Here for 'fileopen' we are checking if the file is being writen to.
            if [ $fileopen -ne 0 ]; then
                echo `date` "${files[$i]}" is being used so has been ignored >> $logfile
            else
                echo `date` File "${files[$i]}" not being used or accessed >> $logfile

                    sepscan=`$sepscan "${files[$i]}" | wc -c`
                    if [ $sepscan = 0 ]; then
                        mv "${files[$i]}" $outputpath
                        echo `date` "${files[$i]}" has been virus scanned and moved to $outputpath >> $logfile
                    else 
                        echo `date` "${files[$i]}" has been moved to $faildir as a virus or error was detected >> $logfile
                    fi
            fi
        done
    fi
    echo `date` 'No more files to process. Waiting 60 seconds...' >> $logfile
    sleep 60
done  

問題を明確にするために他に何か提供できるかどうか教えてください。

更新:
ちなみに、/ mnt / Incoming / ToScan /ディレクトリにsnmp.confというファイルがあります。

疾患
for i in ${files[*]}

する必要があります

for i in ${!files[*]}
# or
for i in ${!files[@]}

${files[*]}配列の内容に展開され、単語分割が行われます。上記の構文は、配列のインデックスのリストに展開されます。

変数を二重引用符で囲む必要がある場合もあります。

if [ "$fileopen" -ne 0 ]; then

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

分類Dev

Bash連想配列にスペースがあるキー

分類Dev

要素内にスペースがあるため、配列要素をより多くの要素に分割する

分類Dev

配列の出力にスペースがあるのはなぜですか

分類Dev

json値にスペースが含まれている場合のbash配列へのjq出力の割り当て

分類Dev

この文字列を配列にする方法-文字列にはスペースがあり、値もあります

分類Dev

スペースがあるのにスペースが足りないというエラーでUbuntuがVirtualBoxにインストールされません

分類Dev

要素にスペースを含むBash配列

分類Dev

Bootstrap3列の内部に奇妙なスペースがあります

分類Dev

スペースがあるのにディスクスペースが残っていない

分類Dev

/ tmpに十分なスペースがありません

分類Dev

最後の2つの要素の間にスペースがある文字列のRuby結合配列

分類Dev

ある程度のスペースがあるはずですが、根がいっぱいになります

分類Dev

ある程度のスペースがあるはずですが、根がいっぱいになります

分類Dev

Ubuntuはホームディレクトリにディスクスペースがないと言っていますが、スペースはあります

分類Dev

不要なスペース要素を削除する必要があります

分類Dev

ブートストラップ4列が右に浮かない-右からスペースがある

分類Dev

構造体へのポインタの動的配列-本当にea要素にスペースを明示的に割り当てる必要がありますか?

分類Dev

行間にスペースがある文字列を、行スペースがない新しい文字列に変換する方法

分類Dev

配列に要素を挿入する方法。これには、phpを介したdbmysqlの次のフィールドとしてスペースがあります。

分類Dev

justify-content:要素間のスペースが端にありません

分類Dev

スペースがあり、smbusに使用するPythonパス入力文字列

分類Dev

あるのにデバイスにスペースが残っていない

分類Dev

あるのにデバイスにスペースが残っていない

分類Dev

私の配列には空白スペース[""]が含まれています。アンダースコアを使用してスペースに.joinすると、結果の文字列のスペース要素がhtmlに表示されません。

分類Dev

「デバイスにスペースが残っていません」エラーがありますが、スペースがあります

分類Dev

文字列配列に終了文字用のスペースを含める必要がありますか?

分類Dev

要素値が存在しない場合にスペースを維持しながら、配列内の値の頻度をカウントする効率的な方法

分類Dev

最初の要素の後に余分なスペースがある理由

分類Dev

スペースのあるSETパスが機能しない

Related 関連記事

  1. 1

    Bash連想配列にスペースがあるキー

  2. 2

    要素内にスペースがあるため、配列要素をより多くの要素に分割する

  3. 3

    配列の出力にスペースがあるのはなぜですか

  4. 4

    json値にスペースが含まれている場合のbash配列へのjq出力の割り当て

  5. 5

    この文字列を配列にする方法-文字列にはスペースがあり、値もあります

  6. 6

    スペースがあるのにスペースが足りないというエラーでUbuntuがVirtualBoxにインストールされません

  7. 7

    要素にスペースを含むBash配列

  8. 8

    Bootstrap3列の内部に奇妙なスペースがあります

  9. 9

    スペースがあるのにディスクスペースが残っていない

  10. 10

    / tmpに十分なスペースがありません

  11. 11

    最後の2つの要素の間にスペースがある文字列のRuby結合配列

  12. 12

    ある程度のスペースがあるはずですが、根がいっぱいになります

  13. 13

    ある程度のスペースがあるはずですが、根がいっぱいになります

  14. 14

    Ubuntuはホームディレクトリにディスクスペースがないと言っていますが、スペースはあります

  15. 15

    不要なスペース要素を削除する必要があります

  16. 16

    ブートストラップ4列が右に浮かない-右からスペースがある

  17. 17

    構造体へのポインタの動的配列-本当にea要素にスペースを明示的に割り当てる必要がありますか?

  18. 18

    行間にスペースがある文字列を、行スペースがない新しい文字列に変換する方法

  19. 19

    配列に要素を挿入する方法。これには、phpを介したdbmysqlの次のフィールドとしてスペースがあります。

  20. 20

    justify-content:要素間のスペースが端にありません

  21. 21

    スペースがあり、smbusに使用するPythonパス入力文字列

  22. 22

    あるのにデバイスにスペースが残っていない

  23. 23

    あるのにデバイスにスペースが残っていない

  24. 24

    私の配列には空白スペース[""]が含まれています。アンダースコアを使用してスペースに.joinすると、結果の文字列のスペース要素がhtmlに表示されません。

  25. 25

    「デバイスにスペースが残っていません」エラーがありますが、スペースがあります

  26. 26

    文字列配列に終了文字用のスペースを含める必要がありますか?

  27. 27

    要素値が存在しない場合にスペースを維持しながら、配列内の値の頻度をカウントする効率的な方法

  28. 28

    最初の要素の後に余分なスペースがある理由

  29. 29

    スペースのあるSETパスが機能しない

ホットタグ

アーカイブ