- 締切済み
シェルスクリプトの条件式の書き方
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でも上記のようにフォルダの有無を判断するコードはあるでしょうか。
- みんなの回答 (1)
- 専門家の回答
みんなの回答
- Wr5
- ベストアンサー率53% (2173/4061)
回答No.1
>sudo mount /dev/sda1 ./usb まず、mountが成功していますか? マウント先のディレクトリ名が「相対パス」表記になっていますから、 カレントディレクトリが、/の時と/rootの時と/usr/binの時などで動作が変わりますが…。 >if [ ! -d ./usb/Data/ ]; then 最後の/は不要…だと思いますが。 カレントディレクトリの場所によってはusbというディレクトリ自体が無いかも知れません。(前述の通り)
お礼
回答ありがとうございます。 マウントは成功しています。 マウントの行の次にls -lでマウントポイントの中を表示させてみましたが、USBメモリの中がちゃんと表示されました。 また、フルパスにしてみましたが、変化ありませんでした。 (Dataをフォルダでなくファイルにしてみて)-fで、ファイルかどうか判断する条件式にするとうまくいくんですが、 -dだと判断できていないようです。
補足
作成したスクリプト自体の実行に sudo を付けたところ、正常に動作しました。 コマンド入力する文字数を減らしたかったので意図的にsudoを付けなかったのですが、付けるしか無いらしく、残念です。 このスクリプト名をAAAとし、 sudo ./AAA と書いたスクリプトBBBを作成し、./BBBと入力し実行する、という流れでも正常に動作しますが、 まどろっこしくて。