0
#!/bin/bash
while read -r line; do
    mkdir "UNIX/$line"
done < usernames.lnk

MasterDir="/home/darkeve/Documents/OS/master/"         
USERHOME="/home/darkeve/Documents/OS/UNIX"            

for FILENAME in `cat $MasterFile`
do
    cp $MasterDir/$FILENAME $USERHOME/$USER
done

私のスクリプトは最初の仕事を正しく行います。最初に「usernames」というファイルを読み取り、各ユーザーの個別のフォルダーをUNIXフォルダーに作成します。ただし、「file1、file2、file3」というマスターフォルダーから3つのファイルをコピーし、UNIXフォルダー内の個々のユーザーフォルダーにコピーすることになっていますが、それは実行されません。どんな助けでもいただければ幸いです。

ps私はスクリプトを初めて使用するので、シンプルにしてください。

4

1 に答える 1

1

現在のスクリプトは、cpコマンドで$ USERを使用しています。これは、「スクリプトを実行しているユーザー」であり、usernames.lnkから読み取られません。個々のフォルダーにコピーする場合は、最初にforループをwhileループ内に配置し、次のように宛先フォルダー名として$lineを使用する必要があります。

#!/bin/bash
MasterDir="/home/darkeve/Documents/OS/master/"         
USERHOME="/home/darkeve/Documents/OS/UNIX"   
MasterFile="filenames.txt"

while read -r line; do
    mkdir "UNIX/$line"
    for FILENAME in `cat $MasterFile`
    do
        cp "$MasterDir/$FILENAME" $USERHOME/$line
    done
done < usernames.lnk

何がうまくいかないのかわからないときは、単に物事をエコーすることをお勧めします。たとえば、

echo "$line" 
echo "$USER"

など、これらの変数の違いを確認します。

また、$MasterFileはスクリプトで定義されていません。最初はMasterDirやUSERHOMEと同じように導入する必要があります。

編集:スクリプトの例で追加しました。ファイルに対応するように変更してください。

于 2013-01-11T10:04:53.823 に答える