私は初めてbashに触れ、スクリプトがうまくいくことはできません。これは私のコードです。
#!/bin/bash
file=~/scripts/text.txt
if [ -e $file ]
then echo "The file exists"
elif [ ! -e $file ]
then echo "The file does NOT exist"
fi
sleep 1s
if [ ! -w $file ]
then { sudo chmod u+w $file; } && { echo "The file is now writable"; }
elif [ -w $file ]
then echo "The file is already writable"
fi
スクリプトの上部では、ファイルが存在し、正しく機能していることを確認します。ファイルの書き込みが可能かどうかを確認する下部が部分的に機能します。ファイルの権限が変更されます。ただし、書き込み権限を有効にしても、「ファイルはすでに書き込むことができます」の代わりに「ファイルは書き込むことができます」というメッセージが表示され続けます。
私が言ったように、私は初めてbashに触れたので、助けてくれてありがとう。 ifステートメントの複雑さは私が現在知っている範囲を超えているので、簡単にしてください。
答え1
奇妙なことは、ファイルsudo
がホームディレクトリにあるにもかかわらず、ファイルの権限を変更するために使用することです。このファイルはあなたのものですか?chmod u+w
ファイル所有者にのみ書き込み権限を付与します。あなたが所有者なら、sudoは必要ありません。所有者でない場合は必ずしも必要ですsudo
が、chmod u+w
所有者に書き込み権限を付与するだけでは、ファイルに書き込む権限は付与されません。したがって、実行後もchmod u+w
ファイルに書き込むことはできません。これは[ -w … ]
テストの結果です。
ls -l ~/scripts/text.txt
ファイルの所有権と権限を確認するには、実行してください。
それ以外の変数の置換には常に二重引用符を使用してください。 (またはすべてを学ぶことができます。ルールそして、すべてのルールを知らない人がスクリプトを維持するのを難しくしてください。 )迷惑なことに、シェル構文は$file
「変数の値を取得します」をfile
意味せず、「変数の値を取得してfile
ワイルドカードパターンリストに解析し、一致するファイルがある場合は一致するファイルのリストを使用することを意味します。パターンを交換してください。」二重引用符で置換が発生すると、この追加コンテンツは閉じられます。"$file"
つまり、「変数の値を取得しますfile
」を意味します。
また、これらの括弧はすべて必要ありません。
if [ ! -w "$file" ]
then
sudo chmod u+w "$file" && echo "The file is now writable"
elif [ -w "$file" ]
then
echo "The file is already writable"
fi
[ -w "$file" ]
yes の負の値なので、その値に達すると[ ! -w "$file" ]
テストelif
は常に成功します。 (競合状態がない場合は、elif
同じ条件を再テストするテストが異なる結果を返す可能性があるため、これはうまくいきません。)したがって、次のように単純化する必要があります。
if [ ! -w "$file" ]
then
sudo chmod u+w "$file" && echo "The file is now writable"
else
echo "The file is already writable"
fi
答え2
見積もりがありません。
echo "The file is now writable;
しなければならない
echo "The file is now writable";
これで問題を解決したので、所有者に代わって権限を変更したと思いますroot
(文字権限スキームに100%慣れていません)。u
root
a
またはを試してみたいかもしれませんo
。
then { sudo chmod a+w $file; } && { echo "The file is now writable"; }
追加:exit 1
ファイルが存在しない場合は、これを行う必要があります。
答え3
以下のコードを試してください。
#!/bin/bash
file=~/scripts/text.txt
# To check existence of the file
[ -e $file ] && E="The file exists" || E="The file does NOT exists"
echo "$E"
# checking whether the file is writable or not and changing permissions
[ -w $file ] && F="The file is already Writable" || F="The file is now Writable"
chmod u+w $file
echo "$F"
答え4
次のスクリプトを使用してテストし、正常に動作しました。
以下のスクリプトは、現在ログインしているユーザーの書き込み条件をテストし、書き込み権限がない場合にファイル所有者が現在ログインしているユーザーと同じ場合にのみ書き込み権限を追加します。
誰にでも書き込みアクセスを許可するには、sudo chmod a+w パスを使用します。
#!/bin/bash
path="/scripts/text.txt"
if [[ -f $path ]]
then
echo "$path file exsists"
if [[ -w $path ]]
then
echo "$path file is writable"
else
echo "$path file is not writable"
echo "Now we are adding write acess to the file"
chmod u+w $path
if [[ -w $path ]]
then
echo "$path file is writable now"
fi
fi
else
echo "$path file doesnt exsists"
fi