• ベストアンサー

cshで変数に値が入っているかどうか見る方法

Cシェルです。 set TEXT = `ls *text` if ( $TEXT == "" ) then endif 上のようにすると、TEXTの中に複数入っている場合 if: 条件式構文が正しくありません と、エラーが出てしまいます。 textという拡張子のファイルが無かった場合、なにか 処理をさせるというような場合には ほかに方法ないでしょうか?

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

  • ベストアンサー
  • osamuy
  • ベストアンサー率42% (1231/2878)
回答No.1

手っ取り早く、 if ( "${TEXT}" == '' ) then とするか、 set NUM_TEXT = `ls -1 *.text | wc -l` if ( ${NUM_TEXT} == 0 ) then とするとか。

taurus4
質問者

お礼

手っ取り早くできました。 ありがとうございました。

その他の回答 (1)

  • wolv
  • ベストアンサー率37% (376/1001)
回答No.2

変数がセットされているかどうかをあらわす変数は、 「?」を使います。セットされていると1、されていなければ0を返します。 TEXTという変数がセットされているかどうかを調べる例では、 $?TEXT とします。 ところが、質問文の例では、lsでファイルがなかった場合にもTEXT変数が「セット」されてしまうので、この方法では調べられません。 変数にセットされた単語の数を調べる「#」を使うのがいいと思います。 set TEXT = () echo $#TEXT とすると、0を返します。 注意 set TEXT = "" echo $#TEXT とすると、1を返します。 参考:  cshのオンラインマニュアル

taurus4
質問者

お礼

こちらの方法でもできました。ありがとうございます。

関連するQ&A

  • Cシェルでの文字列大小比較

    Cシェルで set AA="aa" set BB="bb" if( $AA > $BB )then echo "$AA > $BB" endif というような判定がしたいのですが、 上記の場合、”if: 条件式構文が正しくありません”というエラーが出力されます。 Cシェルの場合、文字列の比較は ifでイコールかノットイコールかは判定できますが、文字コードの大小比較が出来ないようですが、 文字列の大小比較をするにはどうすればよいのしょうか

  • cshの標準出力を制御したい

    実は以下にも同じ質問があったのですが、回答がついてなかったので改めて質問させて頂きます。 cshで以下の様な形で"ls"の結果をシェル変数に取りたいのですが: set list = `ls *.s | sed -n 's/\.s//p'` lsの結果がマッチしなかったときに出力されるメッセージ: ls: 照合パターンに合いません. がコンソールに出力されると誤解を招くのでそれをやめさせたいのですが、何か良い方法はないでしょうか? 色々試しましたが簡単な方法は無い様な気がしています。 [コマンド] set list = `ls *.s | sed -n 's/\.s//p'` [例] (1) OKケース %>ls *.s aaa.s bbb.s 結果==> aaa bbb (2) NGケース %> ls *s ls: 照合パターンに合いません. [とりあえずやりたい事を実現する方法] ls *.s >& /dev/null if($status == 0) then # ls is matched set list = `ls *.s | sed -n 's/\.s//p'` endif ※ 冗長でかつ処理速度が遅いという問題があろうかと思います。 [以前の質問] http://www.okweb.ne.jp/kotaeru.php3?q=825419 以上宜しくお願いいたします。

  • 複数のtextboxの処理を一括で行えませんか?

    初めてVBでプログラムを組んでいるのでいます. そこで,複数のtextboxがある場合,一つ一つに番号が付いているため, 同じ処理を各textbox毎に書いています. 例) if textbox1.text = "" then textbox1.text = 0 endif if textbox2.text = "" then textbox2.text = 0 endif data(0) = textbox1.text data(1) = textbox2.text …… とやっています.今textboxが40個とかあるので, すごく大変です. もっと簡単な方法はありませんでしょうか? 教えてください...

  • cshの条件式について教えてください

    cshで該当ディレクトリにファイルがなければOK、あればエラーというような処理をしようと思っています。 しかし、下記のような記述ではうまくできません。 1) *************************** if ( -e $DIR/*.* ) then echo "NG" exit 1 else echo "OK" endif exit 0 *************************** if文でなく、外にだせばうまくいくのですが... 2) *************************** test -e $DIR/*.* if($status == 0) then echo "NG" exit 1 else echo "OK" endif exit 0 **************************** if ( test -e $DIR/*.* ) then... でもだめでした。 どうにかしてif文で一発判定をしたいと思っているのですが、正しい記述方法を教えてください。 よろしくお願いします。

  • エクセルVBA アクティブのシートによって処理を変える方法

    エクセルの勉強をしていて行き詰まってしまったので相談させて下さい。 現在アクティブになっているシートによって処理を変えるVBAを作っています。 IFを使うことになるかと思うのですが”シート1がアクティブの場合”という 条件をうまく付けることが出来ません。 If "アクティブシートがsheet1" Then <<指定の処理>> ElseIf"アクティブシートがsheet2"Then <<指定の処理>> Else EndIf うまく説明できず申し訳ありませんが条件式の" "の中に入るコードを教えて下さい。 不足部分については補足させて頂きますのでよろしくお願い致します。

  • IF VBA 1つの条件で複数の処理

    IF関数で、1つの条件(セルに特定の文字があったら) セルA1=B1+C1 セルB1=D1+E1 のように2つの処理を行ないたい場合、どんな構文を作成 したらいいでしょうか。 IF~Then ElseIf~Then End If というのが基本構文ですが、条件が複数あるのではなく 条件1つで処理は2つというのが分かりません。

  • Access2000でTextBox変数の代入

    Access2000でTextBox変数を作成し、条件に応じて フォーム上に配置した2つのテキストボックスをその変数に代入したいのですが、うまくいきません。 Public tBox as TextBox If i = 1 Then Set tBox = テキスト1 ElseIf i = 2 Then Set tBox = テキスト2 End if ※ テキスト1、テキスト2はフォーム上に配置した テキストボックスの名称 このコードを実行すると、テキスト1は テキスト1.Textと解釈され、Textプロパティに何も設定 されていない場合、tBoxにはNULLが代入されます。 Textプロパティの値ではなく、テキストボックスオブジェクトそのものを変数に代入するにはどうすればよいのでしょうか。 ご教授お願いします。 環境は OS:Windows2000 Professional   Access2000 です。

  • シェルプログラムの判定について

    皆さんのお知恵をお貸しください シェルはcshです 目的set name = $<で$nameに入る文字が+-*/(一文字毎です)の時エラー処理をしたい 現状下記のプログラムですが判定出来ません set xx = $< set moji = `grep -c '[\-\+\*\/]' xx` if ( $moji == 1 ) then echo 文字に誤りがあります endif  else if ( $moji == 0 ) then echo OKです endif +-*/が入った時にエラーを出したいのですが+-*/をどう判定したらよいのか教えて頂けます様お願い致します。

  • kシェルスクリプト内に行を挿入

    kシェルスクリプトで質問です。 例えば、以下のようなファイルがあったとします ********************************************** #!/bin/ksh   if (条件式1) then   コマンド1   コマンド2 endif if (条件式2) then   コマンド3   # aaaaaaaaaa else   コマンド4 endif ********************************************** ”コマンド3”の文字列をキーにして"# aaaaaaaaaa"の下に 「echo ttttttttt」 と、を追加するといった方法、ないでしょうか? もちろん、viで開いて追加する・・・というのではなく、、、 awkやsed等々、コマンドで。ご存知の方いらしたらお願いします。 ps. 余力があればjavaでも検討したいとは思いますが、javaはまったく初心者。。

  • cshでファイルサイズ取得

    ヤマトです。 cshでファイルのサイズを取得したいのですが、分かりません。 環境はRed Had Linux7.2です。 hoge.txtのファイルサイズが0バイトの場合、処理を行うという事をやりたいのですが・・・ =======SAMPLE====== if ( hoge.txtのファイルサイズ = 0 ) then echo "サイズは0バイトです。" endif 教えて頂けると有り難く思います。宜しくお願いします。