私は練習して努力しています:
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'は素晴らしいデバッグ出力をたくさん提供します。 :)