• ベストアンサー

シェルスクリプトの変数について

表題の件について質問させていただきます。 シェルスクリプト内であるプログラムを走らせて No is 2 という標準出力が得られたとします。 そのなかの2という文字を変数につめたいのですがなかなかうまくいきません。 良い方法をご存知の方ご教授よろしくお願いします。

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

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

おっと, s/[^0-9]//g です. g を忘れてました. というか, これなら no=`echo $str | tr -cd 0-9` でよかったような気がする.

runjump
質問者

お礼

本当にありがとうこざいました。 正規表現の便利さを思い知りました。 これから勉強していきたいと思います。

その他の回答 (2)

  • sakusaker7
  • ベストアンサー率62% (800/1280)
回答No.3

OSがLinuxということはGNU grep が使えるでしょうから、 grep -o '[0-9]\+' でもとれると思います。 参考まで。

runjump
質問者

お礼

ご回答ありがとうございます。 そのような方法もあるのですね。 勉強になりました。

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

str='No is 2' no=`echo $str|sed -e 's/[^0-9]//'` で数字のところだけ残るはずですが.

runjump
質問者

お礼

素早いご回答本当にありがとうございます。 実際は Abzhal Karten = 1 という文字列から1という情報を取り出したいのですが 教えていただいた方法を使うと bzhal Karten = 1 という風になってしまいます。 教えていただいたsedというコマンドを調べてみても、何も問題はないと思うのですが・・・

関連するQ&A

  • シェルスクリプトの変数

    Bシェルのスクリプトで入力した情報を書き出すというスクリプトで詰まってしまったので、アドバイスをお願いできますでしょうか? #!/bin/sh # COUNTER変数のリセット COUNTER=1 # 繰り返す回数を入力 read KURIKAESHI # KURIKAESHIで入力した回数入力を受け取り、出力する while [ $COUNTER -le $KURIKAESHI ];  do # 必要な情報の入力("NYUURYOKU_{COUNTER変数の数字}"の変数に入れる)   read NYUURYOKU_$COUNTER   echo "$NYUURYOKU_$COUNTER" ←※ココ   COUNTER=`expr $COUNTER + 1` done 上記のようなスクリプトを書き、"$NYUURYOKU_$COUNTER"の値を出力したいのですが、何かよい方法はありますでしょうか? echo "$NYUURYOKU_$COUNTER" と記述しただけでは、$NYUURYOKU_と$COUNTERとバラバラになってしまいます。(当然っちゃ当然ですが・・・) 何かよい方法がありましたらご教授お願いいたします。

  • シェルの変数値を読み込む

    シェル(sh)で持っている変数($1~$5)をperlのプログラムに渡したいのですが方法がわかりません。 ご存じの方いらっしゃいましたらお願いします。 Q(1) test.sh: $1、$2、$3、$4、$5 にそれぞれ値が格納 ./test.pl $1 $2 $3 $4 $5 ↑シェル側出力はこうですか? Q(2) test.pl: どうやって変数値($1~$5)を受け取るのでしょうか? 以上、よろしくお願いいたします。

    • ベストアンサー
    • Perl
  • 【シェルスクリプト】 ローカル変数、グローバル変数

    シェルスクリプトのローカル変数、グローバル変数の取り扱いで迷っています。 ---------------- #!/bin/bash count=0 cat file | while read i do count=`expre $count + 1 ` done echo $count ---------------- fileの中身をcatで流して、それを一行ずつ読み込みます。 そのつど、count の値を増やしていくようにしたいのですが、最後の出力値は0となります。 cat→whileで読み込ませて処理している間はローカル変数として扱われているのでしょうか。 またそうであるならば、シェルスクリプトでグローバル変数を明示的に宣言するにはどうのようにすればいいのでしょうか。

  • シェルスクリプトについて

    とあるUNIXサーバが1台あるとします。 でそのマシン上の管理プログラムが同一マシン上にある 「シェルスクリプト(bash)」をキックするとします。 となるとそのシェルスクリプトの実行者(?)は Unixにログオンしているユーザーになるのでしょうか?。 目的としてはそのログインしているユーザーの環境変数 をシェルから参照したいのですが・・ 考え方がWindowsなもので。。すみませんが よろしくお願いします。

  • シェルスクリプトの変数の制限?

    こんにちは。 シェルスクリプトで謎の現象が起こりまして悩んでいます。 現在、 #!/usr/bin/sh var='foo' if [ $? - eq - 0 ]; then mv xxx.bz2 xxx.old.bz2 echo $var | bzip2 -z >xxx.bz2 fi といった感じのシェルスクリプトを動かしています。 これを手作業で、 foo | bzip2 -z >xxx.tmp.bz2 とやると、xxx.tmp.bz2は1.2MB程度のファイルとなるのですが、 上記のシェルスクリプトで実行すると8KBほどにしかなりません。 シェルスクリプトの変数のサイズの制限かと思い、調べてみましたが、 特に制限があるとの資料はみつかりませんでした。 fooの出力がバイナリなので、そのせいかとも思ったのですが、unix系列の場合、windowsと違ってテキスト/バイナリの区別はないはずだしということで、理由がわかりません。 シェルの変数には、やはり制限があるのでしょうか?それとも他の理由でしょうか。ご存知の方がいらっしゃいましたら、ご教示お願いします。 環境はsolarisです。バージョンは、 $ cat /etc/release Solaris 10 8/07 s10s_u4wos_12b SPARC Copyright 2007 Sun Microsystems, Inc. All Rights Reserved. Use is subject to license terms. Assembled 16 August 2007 です。よろしくお願いします。

  • シェルスクリプトで、変数が整数か否かの判断は?

    シェルスクリプトの中で、単純に 「変数が整数なのか」 を判断したいのです。 私が考えたのは、 echo 変数 | grep -c '[1-9][0-9]+' を使って、結果が0か否か調べるというものですが、もっと簡単に調べる方法はないのでしょうか。

  • シェルスクリプトで困っています 2

    度々申し訳ございません。 現在、Linuxマシン1からLinuxマシン2へTelnetでログインし、Linuxマシン2上にあるシェルスクリプト(/bin/sh)を実行し、Linuxマシン2上のプログラムを実行した後、Linuxマシン2からログアウトするシェルスクリプトを作成中です。 その、Linuxマシン2からログアウトする際に、 "exit"を記述しているのですが、その"exit"がTelnetログアウトの意味で実行されず、シェルスクリプトを終了するの意味で実行されていて困っています。 どなたか上手くTelnetからログアウトできるようにシェルスクリプトを組む方法をご存知ではないでしょうか?もし判りましたらご教授下さい。 よろしくお願い致します。

  • シェルの変数をMySQLに送る方法が分かりません

    おはようございます。 前回、MySQLのデータをシェルの変数に入れるという件で質問しましたが、 今度は逆にシェルの変数をMySQLのクエリに送りたいのですが、括弧で 括ってみたり、'や"で括ってみたりしたのですがどうにも上手く行きません。 そのようなことはできないのでしょうか? やりたいことはシェルで保持している変数をMySQLのレコードに登録です。 ご存知の方、是非方法を御教授下さい。 よろしくお願いします。

  • シェルスクリプトについて

    linuxにてプロセスを「kill」する シェルスクリプトを作成したいと思います。 具体的な内容としては、 sshd接続しているすべてのプロセスを 「kill」したいと考えています。 私が考えている手法としましては、 「リダイレクト」と「sed」を利用し、 プロセスIDをファイルに出力。そのプロセスIDを実行する手法ですが、 ファイルに出力されたプロセスIDを変数にセットする方法が わかりませんので、どのような方策をとればよいのかわかりません。 また、上記の手法以外にも可能なやり方がございましたら、 ご教授のほどよろしくお願いします。

  • シェルスクリプト+perl

    シェルスクリプト中で1行だけperlを利用したいと思っています。 しかしシェルスクリプトで利用している変数をperlに持っていく方法が分からず悩んでいます。 ---------------------- #!/ban/bash hoge="hogehoge" perl -e ・・・ ←この中で$hogeを利用したい ---------------------- perlですべて書き直せばできるのですが、1行のためだけに、すべてを修正するのもどうかと思いましたので質問させていただきました。 もしご存知の方いらっしゃいましたらお教えください。