重要なお知らせ

「教えて! goo」は2025年9月17日(水)をもちまして、サービスを終了いたします。詳細はこちら>

【GOLF me!】初月無料お試し

お世話になっております。
最近、シェルスクリプトの学習をし始めた者でございます。

下記のようなCSVファイルをもとに、一行ずつ必要な項目を抜き出し、
実行したいコマンド(cfgutil)に代入するシェルを書いてみたのですが、
下記のようなエラーが発生してしまいます。
※実行コマンド『cfgutil』は、Appleが提供するApple Configuratorという
 アプリをCUI環境で操作するコマンドとなります。

繰り返し処理を行う『while read row;do』~『done』自体に問題があると思い、
Qiita等のナレッジサイト等の情報を中心に調べてみたものの、
問題を発見する事ができずにおります。

本件に際し、先達の皆様からご覧になり、下記ソース内に問題点がございましたら
ご指摘・ご鞭撻賜りたく、何卒お願い申し上げます。

▼シェルの実行環境
MacOS 10.14

▼CSVの内容[ファイル名:CONNECT.csv]
1,DeviceNAME1,DeviceID1
2,DeviceNAME2,DeviceID2
3,DeviceNAME3,DeviceID3
4,DeviceNAME4,DeviceID4
5,DeviceNAME5,DeviceID5

▼発生しているエラー
Line10: syntax error near unexpected token `done'
Line10: `done < CONNECT.csv'

▼ソース
#!/bin/bash
cd 'dirname $0

while read row; do
DeviceID=`echo ${row} | cut -d , -f 3`
DeviceNAME=`echo ${row} | cut -d , -f 2`

cfgutil rename ${DeviceID} ${DeviceNAME}

done < CONNECT.csv

質問者からの補足コメント

  • artoo様にご指摘を頂き、change directoryの末尾のグレイヴ・アクセントが抜けておりましたので、
    下記の通り訂正させて頂きますm(_ _)m

    【誤】cd 'dirname $0

    【正】cd 'dirname $0`

      補足日時:2019/06/23 20:12

A 回答 (3件)

コピペして実行したところ、問題ありません。


# 実際実行してしまうとよくないので、 cfgutil は echo cfgutil にしましたが。


「見えない文字」が混ってないですか?
LANG=C od -t c -t x1 「スクリプトファイル」
を実行してみてください。
スクリプトファイルのダンプが、C言語風の文字と、16進数表示とで出力されます。

改行箇所が \r \n になっているとか
空白のはずの箇所に \? といったエスケープされた文字や、343 200 みたいな3桁の数字が入っているとか、ないですか?
    • good
    • 1
この回答へのお礼

kmee様
ご回答ありがとうございます!
ご指摘頂いた通り、改行コードがCR+LFとなっており、
再度エディタよりLFで保存しなおして、実行したところ、
無事処理が走るようなりました!

的確なご助言を賜りましたこと、重ねて御礼申し上げますm(_ _)m

お礼日時:2019/06/24 20:36

まだ間違えてますが。

cd `dirname $0` ですよ。コピペできない環境ですか?
    • good
    • 0
この回答へのお礼

再度のご指摘ありがとうございますm(_ _)m
質問文面のソースを編集を試みましたところ、
投稿済の文面は編集できないようでしたので、
補足欄において誤表記箇所を抜粋し、
訂正に代えさせて頂いておりました。
補足文面がわかりづらく、申し訳ございません。。。

お礼日時:2019/06/24 20:36

エラーメッセージが合致しないのですが、少なくとも


cd 'dirname $0
は、
cd `dirname $0`
の間違いです。他は、書かれている範囲内ではOKです。
    • good
    • 1
この回答へのお礼

ご回答ありがとうございます!
ソースをコピペした際に、うっかり消してしまったようでした。
ただ、やはり修正後も同じエラーが再現してしまっております(´;ω;`)

お礼日時:2019/06/23 20:10

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!