• 締切済み

シェルスクリプトの条件式の書き方

Linuxでシェルスクリプトを書いています。 USBメモリをマウントし、 その中に Data というフォルダが存在しているかどうか確認をし、それをメッセージで表示する。 という内容です。  #!/bin/bash  sudo mount /dev/sda1 ./usb  if [ ! -d ./usb/Data/ ]; then   echo "Data 無し。" else    echo "Data 有り。"  fi と書いているのですが、 USBメモリの中に Data を用意しても、上記コードでは見つけることができないらしく、 常に"Data 無し。"と表示されてしまいます。 何故目的のフォルダを見つけることができないのでしょうか。 おそらく目的のフォルダがマウント先、つまり所有者がrootなのが問題なのだと思うのですが、 所有者がrootでも上記のようにフォルダの有無を判断するコードはあるでしょうか。

みんなの回答

  • Wr5
  • ベストアンサー率53% (2173/4061)
回答No.1

>sudo mount /dev/sda1 ./usb まず、mountが成功していますか? マウント先のディレクトリ名が「相対パス」表記になっていますから、 カレントディレクトリが、/の時と/rootの時と/usr/binの時などで動作が変わりますが…。 >if [ ! -d ./usb/Data/ ]; then 最後の/は不要…だと思いますが。 カレントディレクトリの場所によってはusbというディレクトリ自体が無いかも知れません。(前述の通り)

tktk1228
質問者

お礼

回答ありがとうございます。 マウントは成功しています。 マウントの行の次にls -lでマウントポイントの中を表示させてみましたが、USBメモリの中がちゃんと表示されました。 また、フルパスにしてみましたが、変化ありませんでした。 (Dataをフォルダでなくファイルにしてみて)-fで、ファイルかどうか判断する条件式にするとうまくいくんですが、 -dだと判断できていないようです。

tktk1228
質問者

補足

作成したスクリプト自体の実行に sudo を付けたところ、正常に動作しました。 コマンド入力する文字数を減らしたかったので意図的にsudoを付けなかったのですが、付けるしか無いらしく、残念です。 このスクリプト名をAAAとし、 sudo ./AAA と書いたスクリプトBBBを作成し、./BBBと入力し実行する、という流れでも正常に動作しますが、 まどろっこしくて。

関連するQ&A

専門家に質問してみよう