リストを使用しようとすると、bashスクリプトは失敗します。

リストを使用しようとすると、bashスクリプトは失敗します。

IPアドレスを確認するためにここでbashスクリプトを見つけました。 http://www.linuxjournal.com/content/validating-ip-address-bash-script

実行しようとするとエラーが発生します。

 test.sh: line 22: syntax error: unexpected "(" (expecting "fi")

22行目は次のとおりです。

  ip=($ip)

質問

  1. この行はリストまたは配列を作成する必要がありますか?
  2. 私は2つの異なるシェルを試しましたが、どちらも機能しません。試験を終えた:

    #!/bin/bash

そして

 #!/bin/sh

どんな提案でも大変感謝します。

ベストアンサー1

それ:

test.sh: line 22: syntax error: unexpected "(" (expecting "fi")

bash報告されたエラーメッセージではありません。 Almquistシェルとその派生物(例:dashbusybox)は、sh次のことを報告します。

$ grep -z '(expecting' /bin/dash
%s unexpected (expecting %s)

ashシェルが配列をサポートしていないという事実に基づいて、このスクリプトはshe-bangに示されているようにbash動作します(3.2以降)。 4次IPv4アドレスをチェックするように、構文を混ぜた#!/bin/bashように見えますが。 、そのうちのいくつかは小数点の3桁に制限されています(たとえば、いくつかのエラーが発生します)。bashzshksh93bash008.008.008.008

とその両方で認識される標準のPOSIX構文を使用すると、sh次のことができます。dashbash

valid_ip() (
  IFS=.
  set -o noglob
  set -- $1''
  [ "$#" -eq 4 ] || exit
  for i do
    case $i in
      ("" | *[!0-9]*) exit 1;;
    esac
    [ "$i" -le 255 ] || exit
  done
)

おすすめ記事