• ベストアンサー

文法 ファイル分岐とif分

shシェルのスクリプトで該当ファイルがあるか無いかで分岐させたいのですが、 構文はどうすればよいのでしょうか? 以下、したいことです。 if then ファイルが無い場合  スクリプト終了 end if

質問者が選んだベストアンサー

  • ベストアンサー
  • utf7
  • ベストアンサー率29% (11/37)
回答No.2

該当部分だけを書きますと、 #!/bin/sh if [ ! -f /hoge/hoge.txt ]; then exit 0 fi となります。そのファイルが0バイトか1バイト以上かなどで「-f」のオプションが変わったりしますが、それは#1さんの記述にもある「man test」で確認することが出来ます。

全文を見る
すると、全ての回答が全文表示されます。

その他の回答 (1)

  • 100Gold
  • ベストアンサー率27% (284/1018)
回答No.1

テストコマンドを使用します。 man testとやれば解説が読めるはずです。 [ -r /file.txt ] みたいな感じでつかいます。

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • ファイルサイズによる条件分岐

    ログファイルのローテート設定をかけようとしています。 /etc/cron.weekly にシェルを配置し、週次でローテートする中で 指定のログファイルが0バイトの場合はローテートを行わないよう if文で条件分岐する必要があります。 その場合の構文はどのようになるのでしょうか?

  • バッチファイルでのif文分岐

    ドラッグ・アンド・ドロップ(以下、D&D)によるバッチファイルを作成する際にダブルクリックでバッチファイルを開こうとする行為のフェールセーフを考えています。 現状では、以下のバッチファイルにファイルやフォルダをD&Dするとif文の分岐の箇所で終了してしまいます。 有識の方の教授をお願いします。 /* ↓↓ 以下コードです ↓↓*/ @echo off if "%1"=="" goto error rem D&Dされたパスを表示 echo %1 echo 終了しました。 goto end :error echo このファイルはダブルクリック形式ではありません。 echo ファイルやフォルダをD^&Dして下さい。 pause exit :end exit /* ↑↑ ここまで ↑↑ */ 開発環境 OS:WindowsXP 以上、よろしくお願いします。

  • if [ 条件式 ]とif[[ 条件式 ]]

    シェルスクリプトでのif [ 条件式 ] と if [[ 条件式 ]] の違いについて教えてください。 以下のシェルスクリプトを実行すると、 意図したとおり、111 と出力されます。 =========▼▼(ここから)▼▼========= #!/bin/sh AAA=yes if [[ "$AAA" = [yY]* ]] then echo 111 else echo 222 fi =========▲▲(ここまで)▲▲========= 上記、スクリプト3行目の if [[ "$AAA" = [yY]* ]] の部分を if [ "$AAA" = [yY]* ] というように、角カッコ 1重にすると、 エラーは発生しませんが、 222と表示されます。 if [ 条件式 ] と if [[ 条件式 ]] の違いについて教えていただけないでしょうか。

  • BシェルのIF文について。。

    BシェルのIF文について。。 現在、Bシェルで特定のファイルが存在する場合、ファイル名の末尾をカウントアップ(ファイル名_01)しようと考えております。 以下がスクリプトの内容なのですが fiが無効というエラーが出てしまいます。。。 対応が分かる方がいらっしゃれば教えてください。。 if [ -f aaa_00.txt] then touch aaa_001.txt fi よろしくお願いします。

  • ifでの条件分岐

    .net vb2005でプログラミングしています。 2つのテキストボックスがあり、その名前をtextbox1,textbox2 , 変数の代入をtx1、tx2とします。 どちらも半角数字で300までしか入力できません。 さらに、tx1に入力されるとtx2も必ず入力される必要があります。 tx1が未入力の場合はtx2も未入力である必要があります。 最初にtx1の文字数が0か確認し、入っている場合、居ない場合と ifで条件分岐させましたが うまくいきません。。 アドバイスいただきたいと思います。 Dim tx1,tex2 As Integer If Len(TextBox1.Text) = 0 Then flg = 0 ElseIf Regex.IsMatch(TextBox1.Text, "^[0-9]{1,3}$") Then tx1= Val(TextBox1.Text) tx1 = Convert.ToInt32(iptx5) '文字列をInteger型(数字型)に変換 Else MsgBox("300までの数字で入力して下さい", vbCritical, "入力エラー") TextBox1.Clear() Exit Sub End If If tx1 > 255 Then flg = 1 MsgBox(ipm_msg2, vbCritical, "入力エラー") TextBox1.Clear() End If '********************************************************************** If Len(TextBox1.Text) = 0 Then flg = 0 exit sub ElseIf Regex.IsMatch(TextBox2.Text, "^[0-9]{1,3}$") Then tx2 = Val(TextBox2.Text) tx2 = Convert.ToInt32(tex2) Else MsgBox(ipm_msg1, vbCritical, "入力エラー") TextBox2.Clear() Exit Sub End If '**255以上なら入力不可** If iptx6 > 255 Then flg = 1 MsgBox(ipm_msg2, vbCritical, "入力エラー") TextBox6.Clear() Exit Sub End If

  • 【VBA】 IFの中にIF

    いつもこちらの識者の方々にはお世話になっています。 VBAの質問です。 やりたいことは下記構文を見ていただければわかると思うのですが、 ------------------------------------------------------------------------------ Sub Test() Dim f As Long Dim lRow As Long lRow = Cells(Rows.Count, 1).End(xlUp).Row For f = lRow To 2 Step -1 If Cells(f, 2).Value = "りんご" Then Cells(f, 2).EntireRow.Delete Else Cells(f, 2).Value = Cells(f, 2) & "0" & Cells(f, 3) Cells(f, 18).Value = If Cells(f, 4).value = 1 Then Cells(f, 13) Else Cells(f, 14) Endif End If Next f End Sub ------------------------------------------------------------------------------ Cells(f, 18).Value = If Cells(f, 4).value = 1 Then Cells(f, 13) Else Cells(f, 14) Endif の部分が解決したい部分になります。 IFで条件分岐したあとの処理にさらにIFで分岐を加えたいのですが、無茶だと思いつつやってみたらやはり通りませんでした。 こういうのはなんというのでしょうか、ネストとも違うと思うのですが・・・ 上記のような場合、どのような構文が適していますでしょうか。

  • Excel VBA 条件分岐のスマートな書き方

    すみません。すごく初歩的な質問なのですが、 Excel VBAで以下のような条件分岐をさせたい場合、 もっとスマートな書き方できませんか? 命題 AとBに対して if not A then 処理X end if if not B then 処理Y end if if not(A and B) then 処理Z(この処理の中には処理Xと処理Yの結果が含まれている) end elseifを使った書き方が思い浮かばず、 同じことを何度も書いているようで、もっと上手に書けそうな気がしまして・・・ どなたかご教示頂けたらと思います。

  • bashのif文で構文エラー:

    bashで時間の比較によっての分岐を考えています。 ネットで検索しながらif構文を下記のようにしてみているのですが、 行 10: 構文エラー: 予期しないファイル終了 (EOF) です となってしまいます。 どなた様かお教え願えませんでしょうか #!/bin/bash DATA=`date +%-H%M` if [ $DATA -gt 600 ];then echo "$DATA" else echo "NG" fi 

  • VBAの複数条件分岐について

    VBAで下記の構文を使用してシート1にある表より 条件に合致するもののみシート2に抽出するようにしています。 現在はシート1のE2セルの値がシート1のB列の値と比較して 該当するものを抽出しています。 この条件が、 シート1のE1のセルの値が20より小さい場合、 かつE2のセルの値がシート1のB列の値と比較して該当するものを シート1に貼り付け、 シート1のE1のセルの値が20以上の場合、 かつE2のセルの値がシート1のD列の値と比較して該当するものを シート1に貼り付ける というような条件に変えたいのですが どのように変更したらよろしいのでしょうか。 よろしくご教授下さい。 ちなみに現在使用している構文です。 これもきれいな構文かはわからないのですが・・・ Sub test() Dim sh1 As Worksheet Dim sh2 As Worksheet Set sh1 = Worksheets("Sheet1") Set sh2 = Worksheets("Sheet2") k = 1 sh2.Cells(k, "B") = sh1.Cells(1, "A") sh2.Cells(k, "C") = sh1.Cells(1, "B") k = k + 1 d = sh1.Range("A65536").End(xlUp).Row For i = 2 To d If sh1.Cells(i, "B") <= sh1.Range("E2") Then sh2.Cells(k, "B") = sh1.Cells(i, "A") sh2.Cells(k, "C") = sh1.Cells(i, "B") k = k + 1 End If Next i sh2.Activate End Sub

  • シェルスクリプトで、サーバー監視

    まだまだスクリプト初心者なので、教えていただきたいのですが、 条件分岐させるifがあると思うのですが、 「サーバーのロードアベレージが1から2の時にトップを保存して、  2を超える時はサーバーを再起動させる。1以下の場合はログ保存する。」 というスクリプトを書きたいのです。 #!/bin/sh AVERAGE=` awk '{gsub(/[.]/,""); print $1}' /proc/loadavg` if [ $AVERAGE > 100 && $AVERAGE < 200 ] ;then top -b -n1 >> ./top if [ $AVERAGE -gt 200 ] ;then shutdown -r now end uptime >> ./top.log 上記のままだとerror: unexpected end of fileと エラーが出てしまいます。ifが2つ入ってるので 正しい記述が必要だと思うのですが、 どうしたらよいでしょうか