• 締切済み

シェルスクリプトの記述について

UBSメモリをディレクトリusbにマウントし、 そのUSBメモリの中に特定のファイルaaaがあればechoで文字を表示する、 という記述をしたいです。 cd /home/user/ mkdir usb sudo /dev/sda1 ./usb if [ -x home/user/usb/aaa ]; then   echo "aaa ari" else   echo "aaa nai" fi 以上を実行すると、aaa nai が表示されてしまうのですが、何故でしょうか。 実行後に/home/user/usbフォルダを見てみると、マウントには成功しています。 勿論USBメモリの中にはファイルaaaはあります。 aaaには実行権が付いているので、ifの後に -x をつけています。 Linux上で, vi aaa sudo cp aaa ./usb のようにaaaファイルを作成してUSBメモリの中にコピーすると、何故か実行権が付いてしまうので、  if [ -f ~~ だったものを  if [ -x ~~ に変更しました。

みんなの回答

  • Tacosan
  • ベストアンサー率23% (3656/15482)
回答No.3

「ファイルの有無」なら -f でテストした方が安全. USBメモリにコピーしたときに実行属性が付くのは, その USBメモリのフォーマットによるものだと思います. FAT系には「実行可能」という属性がなく, Linux からは「全てのファイルが実行可能」と認識されるはずです.

tktk1228
質問者

お礼

解決はしていませんが、おそらく原因はわかりました。 ありがとうございました。

tktk1228
質問者

補足

了解しました、-xを使うのは止めてみます。 しかし、-f でダメだったから -x にしたので、 問題は別のところにあるようです。 直接コマンドを打ち込んでマウントし、 ls usb で見るとしっかり表示されるのですが(それは理由にならないかな)。 書き忘れましたが、 現在USBを認識してくれるmurasakiという自動起動サービスを殺しているので、 マウントを行う前に sudo /sbin/modprobe usb_storage というコマンドでUSBを認識させています。 関係あるでしょうか?

noname#96023
noname#96023
回答No.2

>if [ -x home/user/usb/aaa ]; then パスが変なのは? /home~

tktk1228
質問者

お礼

解決はしていませんが、おそらく原因はわかりました。 ありがとうございました。

tktk1228
質問者

補足

し訳ありません。 投稿の際の記述ミスです。 このスクリプトじゃマウントすらできませんね。 cd /home/user/ mkdir usb sudo mount /dev/sda1 ./usb if [ -x /home/user/usb/aaa ]; then   echo "aaa ari" else   echo "aaa nai" fi 以上で、マウントはできるけどファイルのチェックができず、 「aaa nai」と表示されてしまいます。 やりたいことは、 USBメモリにファイルaaaがある時に「aaa ari」と表示させる、 です。

  • ballville
  • ベストアンサー率47% (233/487)
回答No.1

cpが抜けてるからではないでしょうか >sudo /dev/sda1 ./usb

tktk1228
質問者

お礼

解決はしていませんが、おそらく原因はわかりました。 ありがとうございました。

tktk1228
質問者

補足

申し訳ありません。 投稿の際の記述ミスです。 このスクリプトじゃマウントすらできませんね。 cd /home/user/ mkdir usb sudo mount /dev/sda1 ./usb if [ -x /home/user/usb/aaa ]; then   echo "aaa ari" else   echo "aaa nai" fi 以上で、マウントはできるけどファイルのチェックができず、 「aaa nai」と表示されてしまいます。 やりたいことは、 USBメモリにファイルaaaがある時に「aaa ari」と表示させる、 です。 よろしくお願いします。

関連するQ&A