システムエンジニアの技術LOG

Linux,RaspberryPi3のサーバ構築を中心に、Windows,Macの設定方法もシステムエンジニアが解説。Windows,Mac,Linux,RaspberryPi3のQ&Aサイトです。

Linux

LinuxMint18のシェルスクリプトでShell script arrays Syntax error: “(” unexpectedが出た時の対処方法

投稿日:

おはようございます、こんにちは、こんばんは。

現在、初めてのシェルスクリプトに苦戦しております。
プログラミングは初めてではないので、変数や配列、for文やif文に対して拒絶反応が出るわけでもなく、いろいろ参考にしながら、シェルスクリプトを作成していますが、ハマってしまいました。

やったこと

発生するエラー(構文エラー)

シェルスクリプトで、配列を初期化したところ、下記のエラーが出てしまいました。

Shell script arrays Syntax error: “(” unexpected

構文エラーってことなので、配列の初期化宣言が間違っているってことは分かるんですが・・・

array=()

と記述しているだけ・・何がダメなのかさっぱり分かりません。
参考サイトには上記の書き方で「空」の配列を作成できるって書いてあるしなぁ。

作業環境の確認

いろいろ調べて、自分が使用しているShellを「bash」と思い込んでいるだけで違う環境かも・・と思い、下記のコマンドで自分のShell環境を確認。

echo $SHELL
/bin/bash

「bash」を使っていることを確認できました。
じゃあ、なんで構文エラーが発生するのか・・
次に、シェルスクリプトの先頭で定義している「/bin/sh」が「bash」ではないのかもってことで、下記のコマンドで確認。

ls -l /bin/sh
lrwxrwxrwx 1 root root 4  2月  1 08:33 /bin/sh -> dash

なんか「dash」っていうシェルになっている・・。
どうやら単純にシェルスクリプトの先頭で定義している「/bin/sh」を「/bin/bash」に変更してやると「bash」で動作するっぽいけど、なんか気持ち悪い。
下記のコマンドでシステムの設定を変更することにしました。

sudo dpkg-reconfigure dash

下記の画面が表示されるので、「いいえ」を選択するとOK(標準のシェル「/bin/sh」が「bash」になります)

スクリーンショット_2017-02-01_08-33-02

まとめ

  • LinuxMintの標準シェル(/bin/sh)は「dash」
    変更する場合は、「sudo dpkg-reconfigure dash」
  • echo $SHELL で使用している環境を確認

-Linux

Copyright© システムエンジニアの技術LOG , 2018 All Rights Reserved Powered by AFFINGER5.