私はユーザーにスーパーユーザー権限があるかどうかをテストし、そうでない場合はスーパーユーザー権限を要求するbashスクリプトを作成しました。最終的に、次の2行を削除できるように、2番目の "if"ステートメントを逆に置き換えようとしています(echo "password ok"と次の行のelse)。
# Root user only
if [[ "$EUID" != 0 ]]; then
sudo -k # make sure to ask for password on next sudo
if sudo true; then
echo "Password ok"
else
echo "Aborting script"
exit 1
fi
fi
echo "do my ops"
4行目の目的が「true」であることは、単に空のステートメントですか?
4行目でテストを逆にする必要がありますが、どうすればよいですか?私が試したことは次のとおりです。
if sudo false; then
if sudo true == false; then
if [!(sudo true)]; then
ベストアンサー1
true
bashのキーワードではなく、成功した終了コードですぐに終了するプログラムです。同様に、false
失敗した終了コードで終了するプログラムです。
ターミナルで両方のプログラムを実行してから、$?
最後のプログラムの終了コードを含む変数を読み取ってみてください。
true
echo $? # 0
false
echo $? #1
if sudo true
と同じではありませんif sudo == true
。を使用してプログラムを実行し、if sudo true
終了コードを確認します。true
sudo
だから:
if sudo false; then
プログラムがsudoとして実行されていますfalse
。戻り値は常に false です。
if sudo true == false
true
引数を使用して==
プログラムを実行します。これは明らかにあなたが望むものではありません。false
sudo
if [!(sudo true)]
無効な構文です。
あなたが探しているもの
if ! sudo true;