• ベストアンサー
  • 暇なときにでも

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

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

共感・応援の気持ちを伝えよう!

  • 回答数1
  • 閲覧数2604
  • ありがとう数1

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

  • ベストアンサー
  • 回答No.1
  • notnot
  • ベストアンサー率47% (4686/9856)

expr コマンドが使えます。コマンドを if の条件式で使うときは、{ } で囲みます。 if({ expr "$AA" \> "$BB" >/dev/null }) then ..... endif ただし、$AA $BB ともに数字のときは数値として比較するので、常に文字列として比較したいなら、 expr A"$AA" \> A"$BB" >/dev/null のように両方の先頭に同じ文字をくっつければ$AAが数値でも全体としては数値じゃなくなるので文字列比較になります。 expr 2 \> 10   →偽 expr A2 \> A10  →真

共感・感謝の気持ちを伝えよう!

質問者からのお礼

早速の回答ありがとうございます。 完璧です。 助かりました。

関連するQ&A

  • シェルの配列

    シェルで2つの配列の同じ位置の文字を同時にチェックしようとして以下のコードを組みましたが、上手くいきません。$dd中の文字が配列として扱われていないのはなぜだか教えていただけますか? #! /bin/csh -f set AA="18" set BB="20" set cc = "11 12 18 19" set dd = "24 22 20 21" @ idx = 1 foreach h_code ( $cc ) echo [$AA][$h_code][$BB][$dd[$idx]]     # ccの1個目とddの1個目をそれぞれ$AA,$BBと比較 if( $AA == $h_code && $BB == $dd[$idx] ) then echo "OK" endif @ idx++ end

  • UNIX Cシェルで実数の比較

    UNIX Cシェルで実数の比較がしたいのですが、 うまくいきません 以下のような結果になります。 うまく判定するにはどうすればよいのでしょう #!/bin/csh -f set CONSIZE=-0.01 echo "CONSIZE = $CONSIZE" @ CONSIZE = $CONSIZE if( $CONSIZE < 0.0 )then echo " 0以下;;; $CONSIZE" exit endif 実行 CONSIZE = -0.01 @: 数値形式が正しくありません。

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

    皆さんのお知恵をお貸しください シェルは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 +-*/が入った時にエラーを出したいのですが+-*/をどう判定したらよいのか教えて頂けます様お願い致します。

  • Javaの文字列の大小比較についてです。

    Javaでは、文字列の大小比較をする時、StringのcompareToを使用しまが… compareToの中の処理は一旦char型に直して、それを比較しているのでしょうか? また、compareToを使用せずに、プログラム内に自分で書いた場合、処理速度は変化ありますか?

    • ベストアンサー
    • Java
  • Cシェルでバイナリデータをテキスト文字列として持ちたい

    A.BINというバイナリ形式ファイル (ex) 88 7A BB 4A 11 0D 7D F9 があるとします。 Cシェル内で、このA.BINを”文字列としてもつ”には どうすれば良いでしょうか。 ”文字列として持つ”について、もう少し詳細に言いますと、 set TEXT ## A.BINを何かしらの方法でTEXT変換し、TEXTへ格納 ## ↑ ここがわかりません echo TEXT --標準出力-- 887ABB4A110D7DF9 ↑こんな風に出力されたいです。 もしCシェルで不可能なのであれば、perlならありますので、 perlでの変換方法でも構いません。 すみませんが、知っている方、教えてください><。

  • [Java]文字列分割

    「=」で区切られている文字を以下のように分割したいのですが、 うまいやり方が分からず困っています。ご教授ください。 例. aa=bb → aa と bb に分割 aa=bb=cc → aa と bb と cc に分割 "aa=bb"=cc → aa=bb と cc に分割 要は、囲い文字が「"」(無くても良い)、区切り文字「=」で、 囲い文字で括られた中の「=」は区切り文字とみなさない。 ということがしたいです。

  • Cシェルの文字列操作について

    初心者ですが、Cシェルで、 最大7バイトの文字列('25'とか'1234567')を左空白埋めで表示したいのですがどうしたらよいでしょうか。 (7 - (文字列のバイト数))×空白 + 文字列 ??

  • Cシェルで、文字列中(str)に、固定文字列(abc)の数を数える方法

    Cシェルで、文字列中(str)に、固定文字列(abc)の数を数える方法を教えてください たとえば、 set str = abcdabceabcd set abc = abc str中に、abcを現れる数(3)を求める方法を教えてください Cシェルは詳しい方がいらっしゃいましたら、是非教えてお願いいたします

    • ベストアンサー
    • AJAX
  • linuxのシェルでファイル名に先月以前の日付があるのを削除したい

    linuxのシェルでファイル名に先月以前の日付があるのを削除したい bashでcshellでも良いのですが、 /pgsql/data/pg_log/ の下にたまったlog postgresql-2010-04-01-*.log postgresql-2010-03-31-*.log postgresql-2010-03-30-*.log などのうち、 先月以前の日付があるのを削除するスクリプトを作りたいのですが、上手くいきません。 ls postgresql*.logから全件数回して、if文で比較しようとしましたが、判定がうまくいきません。 何がネックになっているかと言いますと、 文字列「postgresql-2010-04-01-*.log」 文字列「postgresql-2010-04」をif文で比較すると、=の判定はできますが、 >や<で判定すると、全てthenになってしまいます。 文字の大小比較はできないようですね? また、 「postgresql-2010-04-01-*.log」 から、12文字目から7文字抜き出したいのですが、 substrのような事も出来るのかどうなのか分かりません。 bashでこういう事をするのはあまり向いていないのでしょうか? cshellとどちらが向いているでしょうか? あるいはパールなんかを使った方が良いのでしょうか? 当面のやりたい事をクリアする方法、および、ツールの選定についてご教授下さい。 以上、よろしくお願いします。

  • シェルの文字列取得について

    シェル(Bash)の文字列取得についてご教授ください。 文字列:  test(12345) 上記の文字列から"12345"(括弧内の数値部分)を取り出し、変数へ格納する場合、どのように行えばよいのでしょうか? ちなみに1桁だったり2けただったりと数値の桁は変動します。 よろしくお願いします。