権限の変更

権限の変更

私は練習して努力しています:

1)名前またはr、w、x権限のすべての組み合わせでファイルを生成します= 512ファイル。

2) 名前と一致するようにファイルの権限を変更します。

私はこのスクリプトを作成しました:

touch ./{r,-}{w,-}{x,-},{r,-}{w,-}{x,-},{r,-}{w,-}{x,-}

for i in *
   do
       syntax="${i//:}"
       u=${syntax:0:3}
       g=${syntax:3:3}
       o=${syntax:6:3}

       chmod u="$u",g="$g",o="$o" -- "$i" 
  done

名前と一致するように一部の権限が変更されますが、すべてではありません。

答え1

いくつかのエラーがあります。まず、カンマで区切られた3つのファイルセットで構成されるファイルを作成します。

touch ./{r,-}{w,-}{x,-},{r,-}{w,-}{x,-},{r,-}{w,-}{x,-}

しかし、コロンを削除したいです。コロンはカンマでなければなりません。

syntax="${i//:}"

スクリプトが同じディレクトリにある場合、問題が発生する可能性があります。

for i in *

もちろん、../myscriptこれを実行すると問題はありません。ただし、スクリプトが同じディレクトリにある場合は、これを防ぐことができます。

for i in ???????????

(もちろん11文字の名前を指定しないと仮定します。)

最後に大きなバグがあります。ファイル名を3つの文字列に分割しますu='-w-' g='r-x' o='-wx'。例えばchmod;まず、ハイフンを削除する必要があります。したがって、分割後:

u=${u//-}
g=${g//-}
o=${o//-}

これらすべての変更の後、次の作業結果が得られます。

touch ./{r,-}{w,-}{x,-},{r,-}{w,-}{x,-},{r,-}{w,-}{x,-}

for i in ???????????
    do
        syntax="${i//,}"
        u=${syntax:0:3}
        g=${syntax:3:3}
        o=${syntax:6:3}
        u=${u//-}
        g=${g//-}
        o=${o//-}

        chmod u="$u",g="$g",o="$o" -- "$i" 
    done

答え2

解析に文字エラーがあります。構文変数を解析すると、文字列 '--r,--r,--r' が得られます: u='--r' g=',--' o='r,-'

スクリプトを次のように変更する必要があります。

   u=${syntax:0:3}
   g=${syntax:4:3}
   o=${syntax:8:3}

もう一つのヒントは、シェルスクリプトをデバッグするには、インタプリタ行に "-x"を追加することです。つまり、 '#!/bin/bash -x'は素晴らしいデバッグ出力をたくさん提供します。 :)

関連情報