ShellScriptを実行したときに、ユーザーをrootにできません


**現象**  
ShellScriptを実行したときに、ユーザーをrootになることができない。

**期待値**  
ShellScriptを実行したときに、ユーザーをrootにしたい。

**再現手順**  
下記のシェルスクリプトを実行しました。

[code]

    #!/bin/bash
    
    sudo sh -c "
    
    if [ "whoami" = "root" ]; then
     echo OK
    else
     echo NG
    fi
    
    apt update
    apt upgrade
    
    #以下省略
    "
    
[/code]




スクリプト中のダブルクォート`"`の使い方がいろいろとおかしいと思います。

  1. まず`sudo sh -c "`で始まるダブルクォート`"`とスクリプト中に含まれているダブルクォート`"`が重複していて構文的におかしくなっています。
  2. また`sudo sh -c`で使用するクォートはその内部の展開が外側のシェルスクリプトの側で行われてしまうのを極力避けるためにシングルクォート`'`で囲むべきです。
  3. `"whoami"`はその文字列そのものではなく、`whoami`コマンドの出力結果文字列を取得することを意図していると思われるので、ダブルクォート`"`ではなくバッククォート「`」で囲む必要があります。

とりあえず以上のことを加味した修正例が以下のようになります。

[code]

    #!/bin/bash
    
    sudo sh -c '
    
    if [ `whoami` = "root" ]; then
        echo OK
    else
        echo NG
    fi
    
        apt update
        apt upgrade
    
    #以下省略
    '
    
[/code]

またそもそも、処理をわざわざ`sudo sh -c`で囲まない書き方にすればもっとすっきりと記述できるはずだと思います。




スクリプト中のダブルクォート`"`の使い方がいろいろとおかしいと思います。

  1. まず`sudo sh -c "`で始まるダブルクォート`"`とスクリプト中に含まれているダブルクォート`"`が重複していて構文的におかしくなっています。
  2. また`sudo sh -c`で使用するクォートはその内部の展開が外側のシェルスクリプトの側で行われてしまうのを極力避けるためにシングルクォート`'`で囲むべきです。
  3. `"whoami"`はその文字列そのものではなく、`whoami`コマンドの出力結果文字列を取得することを意図していると思われるので、ダブルクォート`"`ではなくバッククォート「`」で囲む必要があります。

とりあえず以上のことを加味した修正例が以下のようになります。

[code]

    #!/bin/bash
    
    sudo sh -c '
    
    if [ `whoami` = "root" ]; then
        echo OK
    else
        echo NG
    fi
    
        apt update
        apt upgrade
    
    #以下省略
    '
    
[/code]

またそもそも、処理をわざわざ`sudo sh -c`で囲まない書き方にすればもっとすっきりと記述できるはずだと思います。

